मैं कोड की इस तरह कुछ स्थानों को देखा है के साथ एक ईवेंट हैंडलर शुरु कर रहा है:सी #: एक डमी
public event SomeEventHandler SomeEvent = (s, e) => { };
है कि काम करने के एक सुझाया गया तरीका? यह क्या हल करता है, और क्या इसका कोई उल्लेखनीय दुष्प्रभाव है? क्या मुझे अभी भी शून्य जांच करनी होगी? या यह वही है जो मुझे और करने की ज़रूरत नहीं है? क्या कचरा संग्रह अभी भी काम करेगा जैसा इसे करना चाहिए?
उदाहरण के लिए:
private PropertyChangedEventHandler propertyChanged;
private readonly object propertyChangedLock = new object();
public event PropertyChangedEventHandler PropertyChanged
{
add
{
lock (propertyChangedLock)
propertyChanged += value;
}
remove
{
lock (propertyChanged)
propertyChanged -= value;
}
}
protected void OnPropertyChanged(string propertyName)
{
PropertyChangedEventHandler handler;
lock (propertyChangedLock)
handler = propertyChanged;
if (handler != null)
handler(this, new PropertyChangedEventArgs(propertyName));
}
मैं इस में पहली पंक्ति बदल सका:
private PropertyChangedEventHandler propertyChanged = (s, e) => { };
और फिर OnPropertyChanged विधि में अशक्त की जांच को छोड़? और अगर मैं नल-चेक छोड़ देता हूं तो क्या मैं लॉक भी छोड़ सकता हूं? यदि ऐसा है तो मुझे यह दे देगा:
protected void OnPropertyChanged(string propertyName)
{
propertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
क्या प्रारंभ में प्रारंभिक समय लेना सुरक्षित होगा? या क्या कुछ साइड इफेक्ट्स हैं जिन्हें मैंने याद किया है?
विषय पर मेरे लेख: http://blogs.msdn.com/ericlippert/archive/2009/04/29/events-and-races.aspx –
अच्छा लेख! दूसरे शब्दों में, इस मामले में शून्य जांच को हटा देना थ्रेड-सुरक्षित होगा। लेकिन ग्राहकों को स्मार्ट हैंडलर की आवश्यकता होती है जो टूट नहीं जाती हैं। क्या मैने इसे सही समझा? – Svish