मैं सी # 3.0 का उपयोग कर रहा हूं। मानक घटना पैटर्न के बाद मेरे पास है:क्या मेरी कक्षा अपनी सार्वजनिक घटनाओं की सदस्यता लेनी चाहिए?
public event EventHandler<EventArgs> SomeEventHappens;
protected virtual void OnSomeEventHappens(EventArgs e)
{
if (SomeEventHappens != null)
{
SomeEventHappens(this, e);
}
}
private object _someProperty;
public object SomeProperty
{
get
{
return _someProperty;
}
private set
{
if (_someProperty == value)
{
return;
}
OnSomeEventHappens(EventArgs.Empty);
_someProperty = value;
}
}
मेरी एक ही कक्षा के भीतर मैं कुछ कार्रवाई जब SomeProperty
परिवर्तन लेना चाहते हैं।
1) मेरी SomeProperty
सेटर के भीतर सामान कार्य करें: जिस तरह से मैं इसे देख रहा 3 विकल्प है। ऐसा करने के बारे में मुझे कुछ गलत तरीका है क्योंकि मैं सबकुछ के दर्शन की सदस्यता लेने की कोशिश करता हूं, एक चीज करना चाहिए और इसे अच्छी तरह से करना चाहिए। एक सेटर में क्रैमिंग सामान उस के खिलाफ जाना प्रतीत होता है, या कम से कम प्रवृत्ति है।
2) OnSomeEventHappens
में सामान करें। फिर, यह सरल टुकड़ों में रखने के खिलाफ थोड़ा सा लगता है। साथ ही, यदि यह विधि ओवरराइड हो जाती है, तो कार्यान्वयनकर्ता मूल विधि को कॉल नहीं करता है, तो संभावित रूप से कार्यक्षमता खो सकता है।
3) कक्षा SomeEventHappens
की सदस्यता लें। मेरे लिए यह उचित विकल्प लगता है जहां तक encapsulation का संबंध है, और बहुत साफ लगता है। फिर, OnSomeEventHappens
पर संभावित प्रतिक्रियाएं ओवरराइड हो गई हैं।
शायद कुछ और सुरुचिपूर्ण है? मैं विकल्प 2 और 3 के बीच फैसला नहीं कर सकता, और मैं उत्सुक हूं कि सर्वश्रेष्ठ अभ्यास क्या है। हो सकता है कि सबसे सुरक्षित स्थान संपत्ति सेटटर में सभी के बाद हो।
विचार?
अद्यतन: नीचे दी गई महान टिप्पणियों और उत्तरों के लिए धन्यवाद। मैंने सीखा है कि कक्षा अपने स्वयं के कार्यक्रमों की सदस्यता लेने के लिए "ठीक है", हालांकि मेरे मामले में मैं ओवरहेड के कारण नहीं करने के लिए झुका रहा हूं। मैंने अपने आभासी तरीकों के संभावित ओवरडर्स के व्यवहार में क्या विचार किया है और मैं वास्तव में क्या करना चाहता हूं।
मेरे असली दुनिया के मामले में, मैं वास्तव में संपत्तियों को सेट किए बिना घटनाओं को उठाना नहीं चाहता हूं। जैसा कि नीचे दिए गए उत्तरों ने मेरी विचार प्रक्रिया को निर्देशित किया है, मुझे लगता है कि मैं निचले ओवरहेड के कारण विकल्प 1 के साथ जा सकता हूं, विरासतकर्ताओं से अनुचित व्यवहार का कम जोखिम, और यह आम तौर पर मुझे बेहतर समझ में आता है। एक बार फिर धन्यवाद!
मैंने यह जवाब चुना क्योंकि यह मेरे द्वारा किए जाने वाले कार्यों के निकटतम स्पष्टीकरण था। मैंने आपको अन्य उत्तरों से बहुत कुछ सीखा। धन्यवाद! –