नहीं, ऐसा नहीं है। मैं सिर्फ निम्नलिखित वर्ग के साथ परीक्षण किया:
public abstract class Class1
{
public abstract string TestStringAbstract { get; set; }
public string TestString { get; set; }
}
और Reflector में यह decompiled। यह जेनरेट कोड था:
public abstract class Class1
{
// Fields
[CompilerGenerated]
private string <TestString>k__BackingField;
// Methods
protected Class1()
{
}
// Properties
public string TestString
{
[CompilerGenerated]
get
{
return this.<TestString>k__BackingField;
}
[CompilerGenerated]
set
{
this.<TestString>k__BackingField = value;
}
}
public abstract string TestStringAbstract { get; set; }
}
जैसा कि आप ठोस संपत्ति के लिए केवल एक ही बैकिंग फ़ील्ड उत्पन्न कर सकते हैं। सार तत्व को परिभाषा के रूप में छोड़ दिया गया था।
यह तार्किक अर्थ बनाता है क्योंकि किसी भी बच्चे वर्ग द्वारा संपत्ति को ओवरराइड किया जाना चाहिए, वहां बैकिंग फ़ील्ड बनाने में कोई बात नहीं है कि कभी भी एक्सेस करने का कोई तरीका नहीं होगा (क्योंकि आप कभी भी अमूर्त संपत्ति तक नहीं पहुंच सकते हैं)।
दूसरी ओर एक आभासी संपत्ति एक समर्थन क्षेत्र और किसी भी वर्ग है कि एक स्वत: लागू किया प्रतिस्थापन के साथ संपत्ति को ओवरराइड करता है कि वर्ग के स्तर पर अपने स्वयं के समर्थन क्षेत्र पैदा करेगा पैदा करेगा।
स्रोत
2009-12-09 21:49:18
धन्यवाद, डिकंपील्ड कोड इसे बहुत स्पष्ट बनाता है। आप रिशेर्पर के साथ ऐसा कैसे करते हैं? –
बस भ्रम से बचने के लिए - यह कोड * resharper * आईएल से पुनर्निर्मित है। यह ** नहीं है ** संकलक उत्पन्न कोड। कंपाइलर आईएल उत्पन्न करता है, सी # नहीं। –
क्षमा करें मेरा मतलब रिशेर्पर नहीं था - मेरा मतलब था * रिफ्लेक्टर * यहां से (http://www.red-gate.com/products/reflector/)। मैंने –