2011-02-02 15 views
7

क्या कक्षा के लिए समानता सदस्यों को उत्पन्न करना संभव है, जिसमें सदस्यों को अपनी मूल कक्षा से भी शामिल किया जाएगा?रिशेर्पर - बेस क्लास सदस्यों समेत समानता सदस्यों को उत्पन्न करें

उदाहरण के लिए - सार आधार वर्ग:

public abstract class MyBaseClass 
{ 
    public int Property1; 
} 

अन्य वर्ग:

public class MyOtherClass: MyBaseClass 
{ 
    public int Property2 {get; set;} 
} 

अगर मैं Resharper के साथ समानता के सदस्यों autogenerate, मैं से Property1 पर केवल MyOtherClass.Property2 संपत्ति के आधार पर समानता प्राप्त है और यह भी नहीं इसकी बेस क्लास

उत्तर

10

पहले बेस क्लास में समानता जांच उत्पन्न करें, फिर इसे वंश में करें।

वंश में, अंतर public bool Equals(MyOtherClass other) कक्षा में होगा।

आधार वर्ग में समानता चेकों के बिना:

public bool Equals(MyOtherClass other) 
{ 
    if (ReferenceEquals(null, other)) 
     return false; 
    if (ReferenceEquals(this, other)) 
     return true; 
    return base.Equals(other) && other.Property2 == Property2; 
} 

सूचना base.Equals(other) को जोड़ा गया कॉल है, जो इस प्रकार में गुणों के लिए जिम्मेदार हो जाता है:

public bool Equals(MyOtherClass other) 
{ 
    if (ReferenceEquals(null, other)) 
     return false; 
    if (ReferenceEquals(this, other)) 
     return true; 
    return other.Property2 == Property2; 
} 
आधार वर्ग में समानता-जांच के साथ

बेस क्लास

नोट कि अगर आप इसे दूसरी तरह के आसपास है, तो आप पहले समानता चेकों वंशज को जोड़ने के लिए, और फिर उन्हें आधार वर्ग को जोड़ने के लिए, तो ReSharper नहीं जाता है तथा वह पिछले वंशज में कोड को संशोधित करता है, आपको या तो इसे पुन: उत्पन्न करना होगा (हटाएं + उत्पन्न करें), या कोड को हाथ से संशोधित करें।

+3

पुन: उत्पन्न करने के लिए, आपको हटाने की आवश्यकता नहीं है। जब आप उत्पन्न करते हैं, तो मौजूदा सदस्यों को प्रतिस्थापित करने का विकल्प होता है। –

+0

आह! उस जानकारी के लिए धन्यवाद। –

+0

वास्तव में, यह आज रिशेर्पर में उत्पन्न होता है (बराबर विधि के संरक्षित संस्करण में) – Ergodyne

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