जवाबों:
एक प्रतिनिधि एक नामित प्रकार है जो एक विशेष प्रकार की विधि को परिभाषित करता है। जिस प्रकार एक वर्ग परिभाषा दी गई वस्तु को परिभाषित करने के लिए सभी सदस्यों को देती है, उसी तरह की विधि को परिभाषित करने के लिए प्रतिनिधि हस्ताक्षर विधि हस्ताक्षर करता है।
इस कथन के आधार पर, एक प्रतिनिधि एक फ़ंक्शन पॉइंटर है और यह परिभाषित करता है कि वह फ़ंक्शन कैसा दिखता है।
एक प्रतिनिधि के एक वास्तविक दुनिया के आवेदन के लिए एक महान उदाहरण है विधेय । लिंक से उदाहरण में, आप देखेंगे कि Array.Find खोज करने के लिए सरणी लेता है और फिर जो ढूंढना है उसके मानदंड को संभालने के लिए एक विधेय। इस मामले में यह एक विधि ProductGT10 से गुजरता है जो कि प्रेडिकेट हस्ताक्षर से मेल खाता है।
जैसा कि "लर्निंग C # 3.0: में कहा गया है, C # 3.0 के मूल सिद्धांत"
सामान्य दृश्य: जब किसी राज्य का मुखिया मर जाता है, तो संयुक्त राज्य अमेरिका के राष्ट्रपति के पास आम तौर पर अंतिम संस्कार में शामिल होने का समय नहीं होता है। इसके बजाय, वह एक प्रतिनिधि को भेजता है। अक्सर यह प्रतिनिधि उपराष्ट्रपति होता है, लेकिन कभी-कभी VP अनुपलब्ध होता है और राष्ट्रपति को किसी और को, जैसे राज्य सचिव या यहाँ तक कि प्रथम महिला को भेजना चाहिए। वह किसी एक व्यक्ति को उसके प्रतिनिधि प्राधिकारी को "कठोर" नहीं करना चाहता है; वह इस जिम्मेदारी को किसी को सौंप सकता है जो सही अंतरराष्ट्रीय प्रोटोकॉल को निष्पादित करने में सक्षम है।
राष्ट्रपति अग्रिम में परिभाषित करता है कि क्या जिम्मेदारी सौंपी जाएगी (अंतिम संस्कार में शामिल हों), क्या मापदंडों को पारित किया जाएगा (संवेदना, दयालु शब्द), और वह क्या मूल्य वापस पाने की उम्मीद करता है (अच्छी इच्छा)। वह तब एक विशेष व्यक्ति को "रनटाइम" में उस प्रतिनिधि जिम्मेदारी को सौंपता है, जब उसकी अध्यक्षता की अवधि आगे बढ़ती है।
प्रोग्रामिंग परिदृश्य में: आपको अक्सर उन परिस्थितियों का सामना करना पड़ता है जहां आपको किसी विशेष कार्रवाई को निष्पादित करने की आवश्यकता होती है, लेकिन आप पहले से नहीं जानते हैं कि किस विधि, या यहां तक कि किस वस्तु पर आप इसे निष्पादित करना चाहते हैं।
उदाहरण के लिए: एक बटन को नहीं पता हो सकता है कि किस वस्तु या वस्तुओं को अधिसूचित करने की आवश्यकता है। किसी विशेष ऑब्जेक्ट पर बटन को वायर करने के बजाय, आप बटन को एक प्रतिनिधि से कनेक्ट करेंगे और फिर उस प्रतिनिधि को किसी विशेष विधि पर हल करेंगे जब प्रोग्राम निष्पादित होगा।
जेनेरिक सूचियों के प्रतिनिधियों का एक सामान्य उपयोग एक्शन प्रतिनिधियों (या इसके अनाम समकक्ष) के माध्यम से एक-लाइन परिचालन के लिए एक लाइन बनाने के लिए है:
myList.Foreach( i => i.DoSomething());
मैं एक सूची की खोज या छंटाई करने में प्रैडिकेट प्रतिनिधि को काफी उपयोगी मानता हूं:
myList.FindAll( i => i.Name == "Bob");
myList.RemoveAll( i => i.Name == "Bob");
मुझे पता है कि आपने कोई कोड आवश्यक नहीं कहा है, लेकिन मुझे कोड के माध्यम से इसकी उपयोगिता व्यक्त करना आसान लगता है। :)
यदि आप यह देखने में रुचि रखते हैं कि वास्तविक दुनिया कोड में डेलिगेट पैटर्न का उपयोग कैसे किया जाता है, तो मैक ओएस एक्स पर कोको से आगे नहीं देखें। कोको मैक ओएस एक्स के तहत प्रोग्रामिंग के लिए ऐप्पल का पसंदीदा UI टूलकिट है, और ऑब्जेक्टिव सी में कोडित है। डिज़ाइन किया गया है ताकि प्रत्येक UI घटक को उपवर्ग या अन्य साधनों के बजाय प्रतिनिधिमंडल के माध्यम से बढ़ाया जा सके।
अधिक जानकारी के लिए, मैं यह जांचने की सलाह देता हूं कि यहां प्रतिनिधियों के बारे में एप्पल का क्या कहना है ।
मेरे पास एक प्रोजेक्ट था जिसमें win32 पायथन का इस्तेमाल किया गया था।
विभिन्न कारणों के कारण, कुछ मॉड्यूल ने DB, और अन्य मॉड्यूल - pyodbc.py का उपयोग करने के लिए odbc.py का उपयोग किया।
एक समस्या थी जब दोनों प्रकार के मॉड्यूल द्वारा एक फ़ंक्शन का उपयोग करने की आवश्यकता थी। इसमें एक तर्क के रूप में एक कनेक्शन ऑब्जेक्ट पास किया गया था, लेकिन फिर यह जानना था कि समय का प्रतिनिधित्व करने के लिए dbi.dbiDate या डेटाइम का उपयोग करना है या नहीं।
ऐसा इसलिए था क्योंकि SQL स्टेटमेंट में ओडब्लूसीएचडी को मान दिया गया था, dbi.dbiDate के रूप में दिनांक जबकि pyodbc.py ने डेटाइम मानों की अपेक्षा की थी।
एक और जटिलता यह थी कि odbc.py और pyodbc.py द्वारा बनाई गई कनेक्शन ऑब्जेक्ट ने अतिरिक्त फ़ील्ड सेट करने की अनुमति नहीं दी थी।
मेरा समाधान एक प्रतिनिधि वर्ग द्वारा odbc.odbc (...) और pyodbc.pyodbc (...) द्वारा लौटाए गए कनेक्शन ऑब्जेक्ट्स को लपेटना था, जिसमें एक अतिरिक्त फ़ील्ड के मान के रूप में वांछित समय प्रतिनिधित्व फ़ंक्शन शामिल है, और जो प्रतिनिधियों को मूल कनेक्शन ऑब्जेक्ट के लिए अन्य सभी फ़ील्ड अनुरोध।
मेरे पास आपके जैसा ही सवाल था और जवाब के लिए इस साइट पर गया।
जाहिरा तौर पर, मैंने इस धागे पर उदाहरणों के माध्यम से स्किम्ड करते हुए भी इसे बेहतर नहीं समझा।
मुझे अब पढ़े जाने वाले प्रतिनिधियों के लिए एक महान उपयोग मिला: http://www.c-sharpcorner.com/UploadFile/thiagu304/passdata05172006234318PM/passdata.aspx
नए उपयोगकर्ताओं के लिए यह अधिक स्पष्ट प्रतीत हो सकता है क्योंकि प्रपत्र POST / GET (QueryString) के साथ ASP.NET वेबसाइटों की तुलना में मानों को पारित करने के लिए बहुत अधिक जटिल हैं।
मूल रूप से आप एक प्रतिनिधि को परिभाषित करते हैं जो पैरामीटर के रूप में "टेक्स्टबॉक्स पाठ " लेता है ।
// फॉर्म 1
// Class Property Definition
public delegate void delPassData(TextBox text);
// Click Handler
private void btnSend_Click(object sender, System.EventArgs e)
{
Form2 frm= new Form2();
delPassData del=new delPassData(frm.funData);
del(this.textBox1);
frm.Show();
}
// सारांश: प्रतिनिधि को परिभाषित करें, नए फॉर्म 2 वर्ग को त्वरित करें, सौंपने के लिए funData () फ़ंक्शन असाइन करें, प्रतिनिधि को अपने टेक्स्टबॉक्स में पास करें। रूप दिखाओ।
// फॉर्म 2
public void passData(TextBox txtForm1)
{
label1.Text = txtForm1.Text;
}
// सारांश: बस टेक्स्टबॉक्स txtForm1 को पैरामीटर के रूप में लें (जैसा कि आपके प्रतिनिधि में परिभाषित किया गया है) और टेक्स्टबॉक्स के पाठ पर लेबल टेक्स्ट असाइन करें।
मुझे आशा है कि यह प्रतिनिधियों पर कुछ उपयोग को उजागर करता है :) ।।
इस http://en.wikipedia.org/wiki/Delegation_pattern के साथ एक त्वरित Google खोज सामने आई । मूल रूप से, कभी भी जब आप किसी ऐसी वस्तु का उपयोग करते हैं जो आगे किसी अन्य वस्तु को कहती है तो आप उसे सौंप रहे हैं।