पहला प्रतिनिधि एक प्रतिनिधि को परिभाषित करता है, दूसरा एक घटना को परिभाषित करता है। दोनों संबंधित हैं, लेकिन वे आमतौर पर बहुत अलग तरीके से उपयोग किया जाता है।
सामान्य रूप से, यदि आप EventHandler
या EventHandler<T>
का उपयोग कर रहे हैं, तो यह सुझाव देगा कि आप एक ईवेंट का उपयोग कर रहे हैं। कॉलर (प्रगति को संभालने के लिए) आमतौर पर ईवेंट (0 प्रतिनिधि में पास नहीं होने पर) सदस्यता लेंगे, और अगर आपके पास ग्राहक हैं तो आप ईवेंट बढ़ाएंगे।
यदि आप अधिक कार्यात्मक दृष्टिकोण का उपयोग करना चाहते हैं, और एक प्रतिनिधि में पास करना चाहते हैं, तो मैं उपयोग करने के लिए एक और अधिक उपयुक्त प्रतिनिधि चुनूंगा। इस मामले में, आप वास्तव में EventArgs
में कोई जानकारी नहीं दे रहे हैं, इसलिए शायद System.Action
का उपयोग करना अधिक उपयुक्त होगा।
कहा जा रहा है कि, यहां दिखाए गए छोटे कोड से एक ईवेंट दृष्टिकोण अधिक उपयुक्त दिखाई देता है। घटनाओं का उपयोग करने के विवरण के लिए, सी # प्रोग्रामिंग गाइड में Events देखें।
आपका कोड, घटनाओं का उपयोग कर, की संभावना कुछ ऐसा दिखाई देगा:
// This might make more sense as a delegate with progress information - ie: percent done?
public event EventHandler ProgressChanged;
public void Download(string url)
{
// ... No delegate here...
जब आप अपनी प्रगति को कहते हैं, आप लिखते हैं:
var handler = this.ProgressChanged;
if (handler != null)
handler(this, EventArgs.Empty);
इस के उपयोगकर्ता इस रूप में लिखते थे:
yourClass.ProgressChanged += myHandler;
yourClass.Download(url);
स्रोत
2013-02-27 18:21:46
है मैं मैं वास्तव में नहीं है वास्तविक घटनाओं की जरूरत है, क्योंकि मैं केवल 1 ग्राहक होगा लगता है और मैं प्रतिनिधियों के आसपास पारित करने के लिए की जरूरत है। जवाब के लिए धन्यवाद। –