जहां तक बाहरी अनुबंध का संबंध है, एक घटना एक सेटर, केवल add
और remove
तरीकों नहीं है - ग्राहकों रजिस्टर और घटना से अपंजीकृत कर सकते हैं, और प्रकाशित करने वस्तु का फैसला करता है जब कॉलबैक आह्वान करने के लिए घटना को 'उठाना' द्वारा। नतीजतन, सामान्य रूप से "एक घटना असाइन करना" का विचार व्यर्थ है। जब आप अपने खुद के कार्यान्वयन प्रदान नहीं करते हैं, यह एक निजी बनाता है, समर्थन प्रतिनिधि मैदान:
हालांकि, जब आप एक वर्ग में एक घटना की घोषणा, सी # संकलक तुम क्या वास्तव में है एक सुविधा-सुविधा के साथ प्रदान करता है उचित जोड़ने/निकालने के कार्यान्वयन के साथ, आपके लिए। यह आपको कक्षा के भीतर "ईवेंट सेट करें" (वास्तव में बैकिंग फ़ील्ड) करने की अनुमति देता है, लेकिन इसके बाहर नहीं। यह समझने के लिए, पर विचार करें:
public class Foo
{
// implemented by compiler
public event EventHandler MyEvent;
public static Foo FooFactory(EventHandler myEventDefault)
{
// setting the "event" : perfectly legal
return new Foo { MyEvent = myEventDefault };
}
}
public class Bar
{
public static Foo FooFactory(EventHandler myEventDefault)
{
// meaningless: won't compile
return new Foo { MyEvent = myEventDefault };
}
}
public class Baz
{
// custom implementation
public event EventHandler MyEvent
{
add { } // you can imagine some complex implementation here
remove { } // and here
}
public static Baz BazFactory(EventHandler myEventDefault)
{
// also meaningless: won't compile
return new Baz { MyEvent = myEventDefault };
}
}
ऐसा लगता है कि इस सुविधा अगले भाषा संस्करण http://roslyn.codeplex.com/wikipage?title=Language+Feature+Status – Zarat
तो में जोड़े जाने के लिए जा रहा है आप अभी भी इच्छुक हैं, कृपया यहां मेरा सुझाव देखें: http://stackoverflow.com/questions/24951619/add-event-handler-during-object-initialization/37994490#37994490 –