2010-03-30 22 views
5

से कॉल करना मेरे पास एक कक्षा है जिससे एक विधि नेस्टेड क्लास को कॉल किया जाता है। मैं नेस्टेड क्लास के भीतर से मूल वर्ग गुणों तक पहुंच बनाना चाहता हूं।नेस्टेड क्लास - नेस्टेड क्लास को पेरेंट क्लास

public class ParentClass 
{ 
    private x; 
    private y; 
    private z; 

    something.something = new ChildClass(); 

    public class ChildClass 
    { 
     // need to get x, y and z; 
    } 
} 

मैं कक्षा वर्ग के भीतर से x, y और z तक कैसे पहुंचूं? अभिभावक वर्ग के संदर्भ में कुछ करने के लिए, लेकिन कैसे?

+0

धन्यवाद कोड को दिखाने के लिए Zach मैं की – insanepaul

+0

संभव दो प्रतियों में कोड डालने की समस्या आ रही था (http: // stackoverflow .com/प्रश्न/185124/क्या-सर्वोत्तम-मार्ग-का-उपयोग-में-नियंत्रण-में-संलग्न-कक्षा-से-द-एनएस) – nawfal

उत्तर

8

उपयोग this कीवर्ड ChildClass के निर्माता के लिए एक संदर्भ के लिए 'अपने आप' पारित करने के लिए। [? क्या नेस्टेड वर्ग से संलग्नित क्लास में नियंत्रण तक पहुँचने का सबसे अच्छा तरीका है] -

public class ParentClass 
{ 
    public X; 
    public Y; 
    public Z; 

    // give the ChildClass instance a reference to this ParentClass instance 
    ChildClass cc = new ChildClass(this); 

    public class ChildClass 
    { 
     private ParentClass _pc; 

     public ChildClass(ParentClass pc) { 
      _pc = pc; 
     } 

     // need to get X, Y and Z; 
     public void GetValues() { 
      myX = _pc.X 
      ... 
     } 
    } 
} 
+0

में पास होना था, धन्यवाद, यह समझने के लिए मेरे लिए बहुत स्पष्ट है। यह 'यह' कीवर्ड है जिसे मैं नहीं जानता था के बारे में। – insanepaul

2

सी # में नेस्टेड कक्षाओं का उपयोग करने के लिए विस्तृत ट्यूटोरियल के लिए http://www.codeproject.com/KB/cs/nested_csclasses.aspx देखें।

class OuterClass 
{ 
    public int y = 100; 

    public class NestedClass 
    { 
     public static void abc() 
     { 
      OuterClass oc = new OuterClass(); 
      System.Console.WriteLine(oc.y);  
     } 
    } 
} 

तो, बाहरी वर्ग के क्षेत्रों तक पहुँचने के लिए, आप आंतरिक वर्ग के लिए उपलब्ध बाहरी वर्ग का एक उदाहरण की जरूरत है: मैं आप की तरह कुछ के लिए देख रहे है।

ध्यान रखें कि आप के आसपास बाहरी वर्ग का एक उदाहरण के बिना भीतरी वर्ग से स्थिर क्षेत्रों तक पहुँच सकते हैं रखें:

class OuterClass 
{ 
    public static int y = 100; 

    public class NestedClass 
    { 
     public static void abc() 
     { 
      System.Console.WriteLine(OuterClass.y);  
     } 
    } 
} 
+0

वह बाहरी कक्षा से संपत्तियों को भीतर से एक्सेस करना चाहता था नेस्टेड कक्षा। इसके बजाय, मुझे लगता है कि आपने जो कुछ किया है वह बाहरी वर्ग को फिर से चालू कर दिया गया है ... और फिर गुणों तक पहुंचा। –

+0

आप सही हैं। लुसेरो या इसहाक द्वारा वर्णित अनुसार, आपको शायद बाहरी वर्ग के मौजूदा संदर्भ में गुजरना होगा। –

+0

हां, जो मैं पढ़ता रहता हूं लेकिन मैं एक मौजूदा संदर्भ कैसे बना सकता हूं? – insanepaul

2

आप में माता पिता के वर्ग उदाहरण के लिए एक संदर्भ में पारित करने के लिए, उदाहरण के लिए की जरूरत है ChildClass का कन्स्ट्रक्टर। बेशक आप ParentClass के फ़ील्ड तक पहुंच सकते हैं यदि वे स्थिर हैं।

नोट: यदि आपने कभी जावा किया है, सी # केवल "स्थैतिक" आंतरिक वर्ग की धारणा का समर्थन करता है।

+0

यही वह है जो मुझे नहीं मिल रहा है, और मुझे इसकी बुनियादी जानकारी पता है, लेकिन मैं कन्स्ट्रक्टर के संदर्भ को कैसे पास करूं? निश्चित रूप से मैं पैरेंट क्लास को नेस्टेड क्लास के कन्स्ट्रक्टर में जोड़ सकता हूं लेकिन मैं कक्षा वर्ग के निर्माता को कॉल करने वाले मूल वर्ग में विधि में क्या पास करूं। मैंने देखा कि मैं स्थैतिक गुणों तक पहुंच सकता हूं, मेरी कोई भी नहीं है :( – insanepaul

2

ठीक है, बाहरी कक्षा के संदर्भ में आपके नेस्टेड क्लास पास के निर्माता पर। इस तरह आप नेस्टेड क्लास के भीतर से मूल वर्ग गुणों तक पहुंच सकते हैं।

इसके अलावा, यह ध्यान देने योग्य है कि मूल वर्ग से स्थिर गुण, आपके लिए उपलब्ध हैं।

http://en.csharp-online.net/Nested_Classes

उदाहरण:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 

namespace Application { 
    class OuterClass { 
     int someProperty = 10; 

     class NestedClass { 
      OuterClass reference; 

      public NestedClass(OuterClass r) { 
       reference = r; 
      } 

      public void DoSomething() { 
       Console.Write(reference.someProperty); 
      } 
     } 

     public OuterClass() { 
      NestedClass nc = new NestedClass(this); 
      nc.DoSomething(); 
     } 
    } 

    class Test { 
     public static void Main(string[] args) { 
      OuterClass oc = new OuterClass(); 
     } 
    } 
} 
+0

यही वह है जो मुझे नहीं मिल रहा है, और मुझे इसकी बुनियादी जानकारी पता है, लेकिन मैं कन्स्ट्रक्टर के संदर्भ को कैसे पास करूं। निश्चित रूप से मैं मूल वर्ग को जोड़ सकता हूं नेस्टेड क्लास का कन्स्ट्रक्टर लेकिन मैं मूल वर्ग में विधि में क्या पास करता हूं जो कि बाल वर्ग के निर्माता को कॉल करता है।मैंने देखा कि मैं स्थैतिक गुणों का उपयोग कर सकता हूं, मेरी कोई भी समस्या नहीं है :( – insanepaul

+0

अधिक पूर्ण उत्तर के लिए एक उदाहरण पोस्ट किया गया। ध्यान दें कि OuterClass निर्माता एक नया NestedsClass बना रहा है, और NestedClass संपत्ति को एक्सेस कर रहा है "कुछ प्रॉपर्टी "OuterClass के –

+0

क्या मुझे बाहरी वर्ग कन्स्ट्रक्टर से एक नया नेस्टेड क्लास बनाना है? मैं बाहरी वर्ग से 'इस' पैरामीटर के साथ नेस्टेड क्लास कन्स्ट्रक्टर को कॉल कर सकता हूं जैसे ... चीज़.इटम टेम्पलेट = नया नेस्टेडक्लास (यह); ... आप देखते हैं कि सभी काम नेस्टेड क्लास में किया जाता है और बाहरी वर्ग की एक विधि इसे कॉल करती है। वैसे भी मैंने त्वरित जांच की है और ऐसा लगता है कि यह काम कर रहा है। इसलिए मुझे बस इतना जरूरी था 'इस' कीवर्ड – insanepaul

संबंधित मुद्दे