पिछले उत्तर को स्क्रैच करें (वंशावली के लिए नीचे रखा गया है)। यह कंपाइलर के कार्यान्वयन पर निर्भर करता है, लेकिन वर्तमान एमएस सी # 3.0 कंपाइलर के तहत, यह वास्तव में केवल एक ही उदाहरण बनाता है जिसे प्रत्येक उदाहरण के लिए पुन: उपयोग किया जाता है। ऐसा करने में सक्षम है क्योंकि प्रतिनिधि अपरिवर्तनीय हैं और प्रतिनिधि को उदाहरण से किसी भी जानकारी की आवश्यकता नहीं है।
मुझे नहीं पता कि यह सी # 2.0 के साथ मामला था या नहीं। आप अपने कोड को संकुचित कर सकते हैं और देख सकते हैं कि आईएल वास्तव में कैश किए गए क्षेत्र का उपयोग करता है या नहीं। नीचे दिए गए उत्तर का उपयोग गारंटी पर एक सुरक्षित तरीका है, हालांकि आप केवल एक उदाहरण बनायेंगे।
मूल जवाब:
हाँ, यह एक प्रतिनिधि का एक उदाहरण बनाता है। इसमें कुछ याद आएगी। आप इसे कम कर सकते हैं हालांकि:
public static class EventHandlers
{
public static readonly EventHandler Empty = delegate {};
}
public sealed class FtpManager
{
public event EventHandler LoggingIn = EventHandlers.Empty;
}
उस बिंदु पर केवल एक उदाहरण होगा, और आप इसे कहीं से भी देख सकते हैं। नकारात्मकता यह है कि अन्य वर्ग एक ही हैंडलर का उपयोग करके सदस्यता समाप्त कर सकते हैं। यदि आप अपने शेष कोडबेस पर विश्वास नहीं करते हैं, तो यह संभवतः स्मृति बिंदु से सबसे अच्छा शर्त है।
स्रोत
2009-03-31 21:00:55
शामिल अतिरिक्त विधि कॉल के बारे में मत भूलना। आप अज्ञात प्रतिनिधि के माध्यम से ईवेंट ईवेंट हैंडलर और एक खाली विधि दोनों को कॉल करेंगे। मैंने कोई परीक्षण नहीं चलाया है, लेकिन आपको कम से कम इसके बारे में पता होना चाहिए ... –