प्रतिनिधियों में से क्या लाभ हैं?

वोट
21

प्रतिनिधियों उपयोग कर के लाभ / लाभ क्या हैं? किसी को भी किसी भी सरल उदाहरण दे सकते हैं?

12/03/2009 को 17:04
का स्रोत उपयोगकर्ता
अन्य भाषाओं में...                            


7 जवाब

वोट
42

वे कोड का एक टुकड़ा encapsulating के लिए एक शानदार तरीका कर रहे हैं। उदाहरण के लिए, जब आप बटन के लिए एक ईवेंट हैंडलर देते हैं, कि हैंडलर एक प्रतिनिधि है। बटन कितना सही समय पर इसे कहते हैं, पता करने के लिए यह क्या करता है की जरूरत नहीं है।

;, छानने पेश आदि सभी टेम्पलेट कोड उसी तरह की आवश्यकता होती है - एक और उदाहरण LINQ है यह सब बदल जाता है तर्क फिल्टर, # 3 सी में लैम्ब्डा भाव इस यह वास्तव में सरल बना देता है (जो प्रतिनिधियों या अभिव्यक्ति के पेड़ में बदला जाता है) के साथ प्रक्षेपण आदि का प्रतिनिधित्व करने के लिए है:

var namesOfAdults = people.Where(person => person.Age >= 18)
                          .Select(person => person.Name);

(यह भी एक प्रश्न अभिव्यक्ति के रूप में प्रतिनिधित्व किया जा सकता है, लेकिन के प्रतिनिधियों से बहुत दूर दूर नहीं करते हैं।)

एक प्रतिनिधि के बारे में सोच का एक और तरीका एक एकल विधि इंटरफ़ेस प्रकार के रूप में है। उदाहरण के लिए, EventHandlerप्रतिनिधि प्रकार की तरह एक सा है:

public interface IEventHandler
{
    void Invoke(object sender, EventArgs e)
}

लेकिन ढांचे में प्रतिनिधि समर्थन प्रतिनिधियों, एक साथ श्रृंखलित जा करने के लिए एसिंक्रोनस रूप से लागू किया, ईवेंट हैंडलर्स आदि के रूप में इस्तेमाल की अनुमति देता है

प्रतिनिधियों और घटनाओं के बारे में अधिक के लिए, देखें विषय पर मेरे लेख । अपना ध्यान केंद्रित घटनाओं है, लेकिन यह भी प्रतिनिधियों को शामिल किया गया।

12/03/2009 को 17:07
का स्रोत उपयोगकर्ता

वोट
12

यह एक बहुत अस्पष्ट विषय है, लेकिन यहाँ कुछ बातों पर विचार करने के लिए कर रहे हैं -

प्रतिनिधियों मूल रूप से एक क्लीनर, आसान समारोह सूचक हैं। किसी भी जगह है जहां समारोह संकेत सी ++ में इस्तेमाल किया गया है, तो आप प्रतिनिधि सोच सकते हैं।

उन्हें डिजाइन में उपयोग करने के लिए लाभ:

  • कोड की आसान पुन: उपयोग करने के लिए नेतृत्व कर सकते हैं
  • अपने डिजाइन में लचीलापन का एक बड़ा राशि प्रदान कर सकते हैं
  • आप पुस्तकालयों और वर्गों है कि आसानी से एक्स्टेंसिबल हैं विकसित करने के लिए अनुमति दें, क्योंकि यह (अन्य कार्यक्षमता में हुक करने का आसान तरीका प्रदान उदाहरण के लिए, जहां LINQ में खंड एक प्रतिनिधि उपयोग कर सकते हैं एक [Func<T,bool>]पर फिल्टर करने के लिए, कहाँ विधि में नए कोड लिखने के बिना

संभावित नुकसान:

  • वे ~can~, खासकर अगर भोलेपन से इस्तेमाल किया है, कोड है कि अधिक पढ़ने के लिए मुश्किल है के लिए नेतृत्व
  • वे अपने घटक में व्यवहार है कि अप्रत्याशित है, क्योंकि आपके नियंत्रण से बाहर 3 पार्टी कोड (उदाहरण के लिए, यदि कोई आपके घटनाओं में से एक है कि एक अनंत लूप का कारण बनता है के लिए एक प्रतिनिधि देता है, यह अपनी कक्षा बुरा देख सकते हैं कहा जाता हो जाएगा लागू कर सकते हैं भले ही यह आप के साथ कोई संबंध नहीं है)
12/03/2009 को 17:14
का स्रोत उपयोगकर्ता

वोट
5

प्रतिनिधियों तीन प्रयोजनों की सेवा:

  1. पर्यवेक्षक पैटर्न का एक सरलीकृत कार्यान्वयन
  2. कॉलबैक का एक सरलीकृत कार्यान्वयन
  3. बेनामी (गैर पुन: प्रयोज्य) कोड के ब्लॉक

देखने वाला

public class Something
{
    public event EventHandler SomethingHappened;
}

public class SomethingConsumer
{
    private mySomething = new Something();

    public void WireUpEvents()
    {
        mySomething.SomethingHappened += whenSomethingHappened;
    }

    private void whenSoemthingHappened(object sender, EventArgs e)
    {
        // do something
    }
}

वापस कॉल करें

public void DoSomethingAsynchronously(EventHandler callBack)
{
    // long running logic.
    callBack(this, EventArgs.Empty);
}

बेनामी गैर पुन: प्रयोज्य कोड

public void DoSomethingReusably(Action nonReusableCode)
{
    // reusable code
    nonReusableCode();
    // more reusable code
}

public void DoALotOfSomething()
{
    DoSomethingReusably(() => { /* non-reusable code here */ });
    DoSomethingReusably(() => { /* non-reusable code here */ });
    DoSomethingReusably(() => { /* non-reusable code here */ });
}

सभी मामलों में, यह conciceness उपलब्ध कराने का मामला है।

12/03/2009 को 17:14
का स्रोत उपयोगकर्ता

वोट
2

अस्वीकरण: मैं यह नहीं कह रहा हूँ मैं कैसे उपयोग किया एक प्रतिनिधि इच्छित तरीका है, लेकिन यह एक उदाहरण है।

मैं केवल यह उपयोग किया है एक बार पहले लेकिन मूल रूप से हमारे अनुप्रयोग में उपयोगकर्ता एक 'पूरा' बटन एक कदम है जो फिर एक रूटिंग पृष्ठ के लिए उन्हें ले जाता है जहां वह अगले भेजने के लिए तय करने के लिए के लिए क्लिक करता है। तो तकनीकी रूप से कदम वे सिर्फ पर वास्तव में जब तक वे मार्ग यह पूरा नहीं हुआ है 'पूर्ण' क्लिक किया। लेकिन चूंकि मैं एक पेज पर हूँ मैं आसानी से जहां वे सिर्फ थे करने के लिए उपयोग नहीं था।

तो क्या मैं (इस मामले में एक ई-मेल) कुछ ही कदम है कि विशेष संसाधन की आवश्यकता के लिए एक प्रतिनिधि बनाया गया था जब क्लिक 'पूरा' किया था, और जब वे इसे अगले पृष्ठ पर कराई मैं प्रतिनिधि के अस्तित्व के लिए और अगर जाँच करेगा यह वहाँ यह मेरी 'संग्रहीत' ईवेंट को सक्रिय करने के लिए कॉल किया गया था।

क्रिएटिव: शायद, गलत: शायद, काम: निश्चित रूप से।

जैसे कि मैंने शायद नहीं कहा यह कैसे उपयोग किया करने का इरादा था, लेकिन कोडिंग विज्ञान सही जितना कला है?

12/03/2009 को 17:26
का स्रोत उपयोगकर्ता

वोट
2

क्या की तुलना में फायदे? प्रतिनिधियों उपयोगी चीजें हो सकता है, और निश्चित रूप से मामूली जटिल सी # कोड का एक बहुत में अपनी जगह है। (जब भी आप कक्षाओं में घटनाओं का उपयोग आप परोक्ष बहुस्त्र्पीय प्रतिनिधियों का उपयोग कर रहे हैं)। आप उनके वाक्य विन्यास और उपयोग के लिए एक परिचय चाहते हैं, मैं निम्नलिखित लेख की सिफारिश:

12/03/2009 को 17:10
का स्रोत उपयोगकर्ता

वोट
2

सी # में प्रतिनिधि eqv है। सी में सूचक कार्य करने के लिए, लेकिन यह भी वर्ग उदाहरण है कि यह से बनाया गया था के लिए एक संदर्भ वहन करती है।

विण्डोज़ फॉर्म्स के सभी ईवेंट हैंडलर्स प्रतिनिधियों कर रहे हैं।

12/03/2009 को 17:10
का स्रोत उपयोगकर्ता

वोट
1

मैं एक प्रारंभिक जावा जीयूआई रूपरेखा है कि प्रतिनिधियों या आदेश के मार्ग की धारणा नहीं था याद है। आदेश में एक बटन है कि कुछ करता है बनाने के लिए, आप के लिए था बटन उपवर्ग और क्लिक विधि ओवरराइड। आप बहुत सारे और उन में अपने आवेदन कोड के छोटे टुकड़े के साथ यूआई तत्व उपवर्गों के बहुत सारे के साथ समाप्त हो गया।

कोड संभालती है कि क्लिक कहीं जाने के लिए है, और जैसे जावा या सी # यह एक वर्ग पर जाना पड़ता है एक OO भाषा में है, लेकिन प्रतिनिधियों यह सुविधाजनक जगह पर होने की अनुमति है। यही कारण है कि अक्सर एक रूप कक्षा में भी कई अलग अलग बातें कर रही है बहुत ज्यादा कोड होने की ओर जाता है, लेकिन यह एक अलग मुद्दा है।

12/03/2009 को 17:37
का स्रोत उपयोगकर्ता

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more