c# .NET नेस्टेड क्लासेस




boo nested-class (3)

फ़ील्ड ए क्लास फील्ड ए के संदर्भ को संभालती है, जो वर्ग फ़ील्ड ए के संदर्भ को संभालता है, जो वर्ग फ़ील्ड के संदर्भ को संभालता है, जो कि कक्षा फ़ील्ड के संदर्भ को संभालता है, जो वर्ग फ़ील्ड के संदर्भ को संभालता है, जो वर्ग फ़ील्ड के संदर्भ को संभालता है, जो कि कक्षा फ़ील्ड के संदर्भ को प्राप्त करता है ...

यह काम करता है क्योंकि आप ऐसा करने के लिए कहा था।

वर्तमान कक्षा पुस्तकालय जिस पर मैं काम कर रहा हूं, उस पर 50 विशिष्ट "फ़ील्ड" प्रकार के साथ एक बेस क्लास (फ़ील्ड) होगा जो कि "फ़ील्ड" से प्राप्त होगा और पठनीयता बनाए रखने के लिए नेस्टेड होगा। उदाहरण के लिए...

abstract class Field
{
    public int Length { get; set; }

    public class FieldA : Field
    {
        public static void DoSomething()
        {
            Console.WriteLine("Did something.");
        }
    }
}

अब तक सब कुछ अच्छा लग रहा है और मैं दिखाया गया कोड का उपयोग कर सकता हूं:

class Program
{
    static void Main(string[] args)
    {
        Field.FieldA.DoSomething();
    }
}

हालांकि, यह क्यों काम करता है? यहां क्या हो रहा है कि कंपाइलर / आईडीई इंटेलिसेंस को इन "फील्डए" के चेन को जारी रखने की अनुमति मिलती है?

class Program
{
    static void Main(string[] args)
    {
        Field.FieldA.FieldA.FieldA.FieldA.FieldA.FieldA.FieldA.DoSomething();
    }
}

यह किसी भी तरह से तोड़ने वाला आवेदन नहीं है, लेकिन सोचा कि यह अजीब था। क्या बू में यही बात है (जो कि लाइब्रेरी के लिए इस्तेमाल की जाने वाली वास्तविक भाषा है)।


लगता है जैसे तुम कुछ करना चाहते थे:

abstract class Field
{
    public int Length { get; set; }
}

public class FieldA : Field
{
    public static void DoSomething()
    {
        Console.WriteLine("Did something.");
    }
}

अन्यथा आप उस में एक आंतरिक वर्ग के साथ एक बेस क्लास परिभाषित कर रहे हैं, जो भी उत्तराधिकारी मिलेगा। इसलिए जब आप आंतरिक कक्षा बनाने के लिए बाहरी कक्षा से प्राप्त करते हैं, तो आप एक लूप शुरू कर रहे हैं।


  1. Field में Field FieldA नामक एक सार्वजनिक नेस्टेड-क्लास है
  2. Field FieldA Field से FieldA
  3. इस प्रकार आप FieldA से हमेशा FieldA तक पहुंच सकते हैं

संदर्भ असीम श्रृंखला नहीं पैदा कर रहा है, यह केवल एक ही वर्ग की ओर इशारा करता है। ( कुछ परीक्षण कोड )

जब आप FieldA.FieldA उपयोग FieldA.FieldA , तो बाद का FieldA इस तथ्य के कारण सुलभ हो जाता है कि पूर्व Field FieldA Field का एक उदाहरण है, इसलिए बाद का Field FieldA वास्तव में Field उपयोग करता है। Field.FieldA





class-structure