आपको ईवेंट पर एक्सेसर्स को जोड़ने और निकालने की आवश्यकता है, और उसके बाद प्रतिनिधि की लक्षित सूची देखें, या लक्ष्य को स्टोर करें सूची।
ऐड विधि में, आप प्रतिनिधि को पहले से जोड़े गए लक्ष्यों की एक सूची प्राप्त करने के लिए Delegate.GetInvocationList विधि का उपयोग कर सकते हैं।
चूंकि प्रतिनिधियों को समान लक्ष्य की तुलना करने के लिए परिभाषित किया जाता है, यदि वे एक ही लक्ष्य वस्तु से उसी विधि से जुड़े होते हैं, तो आप शायद उस सूची के माध्यम से भाग सकते हैं और तुलना कर सकते हैं, और यदि आपको कोई भी तुलना करने वाला कोई नहीं मिलता है, तो आप नया जोड़ते हैं ।
यहाँ नमूना कोड है, सांत्वना आवेदन के रूप में संकलन:
using System;
using System.Linq;
namespace DemoApp
{
public class TestClass
{
private EventHandler _Test;
public event EventHandler Test
{
add
{
if (_Test == null || !_Test.GetInvocationList().Contains(value))
_Test += value;
}
remove
{
_Test -= value;
}
}
public void OnTest()
{
if (_Test != null)
_Test(this, EventArgs.Empty);
}
}
class Program
{
static void Main()
{
TestClass tc = new TestClass();
tc.Test += tc_Test;
tc.Test += tc_Test;
tc.OnTest();
Console.In.ReadLine();
}
static void tc_Test(object sender, EventArgs e)
{
Console.Out.WriteLine("tc_Test called");
}
}
}
आउटपुट:
tc_Test called
(यानी केवल एक बार।)
स्रोत
2009-06-01 22:54:42
आपको सिस्टम का उपयोग करने की आवश्यकता है। लिंक का उपयोग कर। –
हरमन की टिप्पणी को स्पष्ट करने के लिए बस; आपको अपनी कक्षा या वर्तमान नामस्थान में 'System.Linq' का उपयोग करके नामस्थान 'System.Linq' शामिल करना होगा। –
आकर्षक। LINQ अभी भी मेरे लिए काफी नया है कि मुझे इसे देखना है और याद दिलाया जाना चाहिए इसका मतलब है भाषा एकीकृत क्वेरी ... और फिर आश्चर्य है कि ईवेंट इन्डलैंडर्स और उनके आमंत्रण सूची के साथ क्या करना है? – fortboise