2013-10-22 4 views
7

संपादितबेस क्लास लागू करता है INotifyPropertyChanged: व्युत्पन्न प्रकार अपने PropertyChanged घटना का उपयोग कर सकते हैं?

पोस्टर संकेत से, मैं MSDN पर निम्नलिखित उपयोगी लिंक मिल गया है:

How to: Raise Base Class Events in Derived Classes (C# Programming Guide)

Derived classes cannot raise base class events


मैं एक दिलचस्प का सामना करना पड़ा जबकि पुनर्रचना प्रश्न जिसके लिए मुझे अब तक कोई जवाब नहीं मिला है:

रिफैक्टरिंग में abstract बेस क्लास बनाने का समावेश होता है जो INotifyPropertyChanged लागू करता है, व्युत्पन्न प्रकार इंटरफ़ेस को स्वयं लागू करने के बजाय इसका उपयोग करेंगे।

क्या व्युत्पन्न प्रकार बेस क्लास इवेंट PropertyChanged का उपयोग कर सकते हैं या उन्हें नीचे दिखाए गए अनुसार इसे ओवरराइड करना चाहिए?

यदि उन्हें override होना चाहिए तो क्या आप कारण बता सकते हैं कि ऐसा क्यों होना चाहिए?

(ध्यान दें: रिफैक्टरिंग Resharper द्वारा सुझाव दिया गया है)

public abstract class BaseDTO : INotifyPropertyChanged 
{ 
    public virtual event PropertyChangedEventHandler PropertyChanged; 

    [NotifyPropertyChangedInvocator] 
    protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null) 
    { 
     PropertyChangedEventHandler handler = PropertyChanged; 
     if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName)); 
    } 
} 

public class ReviewDTO : BaseDTO 
{ 
    private ImageSource _image; 
    private string _summary; 
    private string _url; 

    public string Url 
    { 
     get { return _url; } 
     set 
     { 
      if (value == _url) return; 
      _url = value; 
      OnPropertyChanged(); 
     } 
    } 

    public string Summary 
    { 
     get { return _summary; } 
     set 
     { 
      if (value == _summary) return; 
      _summary = value; 
      OnPropertyChanged(); 
     } 
    } 

    public ImageSource Image 
    { 
     get { return _image; } 
     set 
     { 
      if (Equals(value, _image)) return; 
      _image = value; 
      OnPropertyChanged(); 
     } 
    } 

    public override event PropertyChangedEventHandler PropertyChanged; 
} 
+1

घटना के लिए खुद को वर्चुअल या ओवरराइड करने के लिए बिल्कुल कोई कारण नहीं है (जिसे मैं सोच सकता हूं)। –

+0

मैंने एमएस से प्रासंगिक लिंक के साथ प्रश्न अपडेट किया है जो आपकी कहानियों की पुष्टि करता है, सभी को धन्यवाद! – Aybe

उत्तर

5

मुझे नहीं लगता कि वे चाहिए ओवरराइड।

आधार प्रकार एक

संरक्षित शून्य RaisePropertyChanged (स्ट्रिंग प्रॉपर्टी) को परिभाषित कर सकते हैं;

व्युत्पन्न कक्षाएं केवल संपत्ति अधिसूचनाओं को ट्रिगर करने के लिए मूल विधि का आह्वान कर सकती हैं। MSDN page on implementing INotifyPropertyChanged

बेशक

, अपने आधार प्रकार अद्वितीय गुण का नाम (कम कबाड़ वस्तुओं) प्रति घटना args उसमें केवल एक ही बनाने की तरह अधिक उपहार

  • जोड़ सकते हैं
  • :

    बस कुछ समर्थन सबूत नहीं मिला

  • कॉलर मेम्बरनाम
  • के माध्यम से संपत्ति का नाम गलत संपत्ति नामों को ध्वजांकित करने के लिए लैम्ब्डा अभिव्यक्ति फ़ॉर्म का उपयोग करके
+0

लैम्ब्डा अभिव्यक्ति फ़ॉर्म का उपयोग करके आपका क्या मतलब है? – Aybe

+1

इस थ्रेड पर बिटबोनक द्वारा पोस्ट देखें http://compositeextensions.codeplex.com/discussions/53731 संकलन-समय संपत्ति नाम चेक के लिए लैम्ब्डा अभिव्यक्तियों का उपयोग कैसे करें – Gishu

संबंधित मुद्दे