2011-07-02 11 views
6

से संपत्तियों के लिए विधि वापस नहीं मैं परीक्षण कार्यक्रम निम्नलिखित हैं:PropertyInfo.GetSetMethod (सही) आधार वर्ग

public class FooBase 
{ 
    public object Prop { 
    get { return null; } 
    private set { } 
    } 
} 
public class Foo :FooBase 
{ 
} 
class Program 
{ 
    static void Main(string[] args) 
    { 
    MethodInfo setMethod = typeof(Foo).GetProperty("Prop").GetSetMethod(true); 
    if (setMethod==null) 
     Console.WriteLine("NULL"); 
    else 
     Console.WriteLine(setMethod.ToString()); 
    Console.ReadKey(); 
    } 
} 

और यह "शून्य" से पता चलता है, तो मैं इसे चलाते हैं। यदि मैं संपत्ति फू को कक्षा फू में ले जाता हूं तो मैं उम्मीद के अनुसार काम करता हूं। क्या यह .NET में एक बग है?

+0

कृपया नीचे वोट, वैध सवाल की व्याख्या करें। – Nix

+1

मैंने शीर्षक बदल दिया। कभी भी एक बग की अपेक्षा न करें, लेकिन अपनी समझ पर संदेह करें और प्रश्न शीर्षक बनाएं जो दूसरे के लिए पठनीय हैं ताकि वे समझ सकें कि प्रश्न उनके लिए दिलचस्प है या नहीं। बीटीडब्ल्यू: मैंने वोट कम नहीं किया लेकिन मुझे लगता है कि इसे शीर्षक के साथ करना है। –

+0

जानकारीपूर्ण शीर्षक के लिए खेद है। लेकिन आपका भी सही नहीं था। मैंने एक को सही करने के लिए बदल दिया है। –

उत्तर

3

संपादित

क्षमा करें,

आप नीचे अपनी टिप्पणी में सही हैं। त्रुटि अलग है। फू क्लास में कोई सेट विधि नहीं है, यही कारण है कि यह एक विधि वापस नहीं कर रहा है। यह वहां नहीं है क्योंकि यह बेस क्लास में निजी है।

+0

+1 ने मुझे इसे हराया। – Nix

+1

नहीं, GetProperty स्वयं सही मान देता है - अन्यथा यहां अपवाद होगा। GetSetMethod विधि मान्य मान वापस नहीं करती है। –

+0

क्षमा करें, मैंने अपना जवाब सही किया। –

5

यह डिज़ाइन द्वारा है।

public class Foo : FooBase { 
    void Test() { 
     Prop = new object(); // No 
     ((FooBase)this).Prop = new object(); // No 
    } 
} 

अपने कोड के typeof (FooBase) .GetProperty ("प्रोप") का उपयोग करना होगा: FooBase संपत्ति सेटर तुम क्या करने की कोशिश, फू वर्ग में सुलभ नहीं है कोई फर्क नहीं पड़ता।

6

आप संपत्ति, सरल विस्तार विधि हो सकता है की घोषणा के प्रकार पर PropertyInfo हो रही द्वारा इसे प्राप्त कर सकते हैं ...

public static class Extensions 
{ 
    public static MethodInfo GetSetMethodOnDeclaringType(this PropertyInfo propertyInfo) 
    { 
     var methodInfo = propertyInfo.GetSetMethod(true); 
     return methodInfo ?? propertyInfo 
           .DeclaringType 
           .GetProperty(propertyInfo.Name) 
           .GetSetMethod(true); 
    } 
} 

फिर अपने बुला कोड है ...

class Program 
{ 
    static void Main(string[] args) 
    { 
     MethodInfo setMethod = typeof(Foo) 
           .GetProperty("Prop") 
           .GetSetMethodOnDeclaringType(); 
     if (setMethod == null) 
      Console.WriteLine("NULL"); 
     else 
      Console.WriteLine(setMethod.ToString()); 
     Console.ReadKey(); 
    } 
} 
संबंधित मुद्दे