मुझे कुछ अजीब पता चला, जिसे मैंने काम करने की उम्मीद नहीं की थी, वास्तव में काम करता है। बल्कि क्षेत्र सेबेस क्लास से सबक्लास 'संपत्ति एक्सेस करें
public abstract class Parent {
public Parent() {
var constName = ConstName; // <-- surprisingly, this works
var randomName = RandomName; // <-- surprisingly, this works
}
public abstract string ConstName { get; }
public abstract string RandomName { get; }
}
public class Child : Parent {
public override string ConstName { get { return "Mike"; } }
public override string RandomName { get { return new Random().Next().ToString(); } }
}
Name
एक गैर स्थिर संपत्ति है: मैं निर्माता 'आधार वर्ग से (स्थिर) संपत्ति' एक उपवर्ग पहुँच सकते हैं। मैंने हमेशा सोचा कि एक प्रकार के प्रारंभिक (static
और const
फ़ील्ड के लिए) निष्पादित किए गए थे, फिर उसके बेस क्लास के, फिर बेस सीटीओ और फिर सबक्लास 'सीटीओआर। जिसका मतलब है कि बच्चे अभी तक पूरी तरह से निर्मित नहीं है जबकि माता-पिता ctor में।
क्या यह "कानूनी" सी # है जो सभी परिस्थितियों में काम करेगा? यह क्यों काम करता है?
संपादित करें:
नहीं, यह एक डुप्लिकेट प्रश्न नहीं है। उसमें मेरे प्रश्न में कक्षा स्कीमा नहीं है।
आपके पास माता-पिता के अंदर नाम संपत्ति है! तो तकनीकी रूप से यह कानूनी और सही है। –
@ निकिता हाँ, लेकिन अभी तक बच्चा नहीं बनाया गया है। मेरे प्रश्न में प्रारंभिकरण के आदेश को पढ़ें। –
तो आप कह रहे हैं कि जब आप डीबग करते हैं और यह आधार निर्माण के लिए जाता है, तो आपको नाम माइक के रूप में मिला है ?? –