वर्ग के प्रतिबिंब गुणों द्वारा प्राप्त करें, लेकिन विरासत में मिली कक्षा से नहीं


80
class Parent {
   public string A { get; set; }
}

class Child : Parent {
   public string B { get; set; }
}

मुझे केवल संपत्ति बी प्राप्त करने की आवश्यकता है, लेकिन संपत्ति ए के बिना

Child.GetProperties(System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance)

दोनों गुण लौटाएँ: /

जवाबों:


155

आपको अपने झंडों में BindingFlags.DeclaredOnly को जोड़ना चाहिए , अर्थात:

typeof(Child).GetProperties(System.Reflection.BindingFlags.Public
    | System.Reflection.BindingFlags.Instance
    | System.Reflection.BindingFlags.DeclaredOnly)

2
क्या यह दूसरा रास्ता हो सकता है। माता-पिता। बच्चे (और) माता-पिता और बच्चे से सभी संपत्तियां प्राप्त करें यदि विशिष्ट वस्तु बच्चे को विरासत में मिली है
Maiko Kingma

10

DeclaredOnly बाध्यकारी ध्वज का उपयोग करने का प्रयास करें। इसमें उन गुणों को सीमित करना चाहिए जो केवल उस वर्ग पर घोषित किए जाते हैं, जिसमें आप रुचि रखते हैं। और यहां एक कोड नमूना है:

PropertyInfo[] properties = typeof(Child).GetProperties(System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.DeclaredOnly);


4

से Type.cs : इस मामले में DeclaredOnlyLookup का उपयोग

  private const BindingFlags DefaultLookup = BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public;
  internal const BindingFlags DeclaredOnlyLookup = BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static | BindingFlags.DeclaredOnly;

1
दिलचस्प है, मैं इस दृष्टिकोण का उपयोग करूंगा और अपने स्वयं के कॉन्स्टेबल बाइंडिंगफ्लैग्स को परिभाषित करूंगा। सोर्स कोड देखने के लिए +1।
सी। ट्वायलेट
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.