2010-08-11 11 views
5

किसी को भी व्याख्या कर सकते हैं, इसलिए हम इस तरह बात कर सकते हैं और यही कारण है कि हम इसपब्लिक इनर क्लासों

public class OuterClass 
{ 
    public class InnerClass 
    { 
    } 
} 

की जरूरत क्यों हम पब्लिक इनर जो कुछ भी जरूरत है: struct, वर्ग, enum या स्थिर वर्ग?

मुझे लगता है कि यदि यह आंतरिक है तो यह केवल निजी या संरक्षित होना चाहिए।

+0

तुम्हें क्या लगता है "यह है कि अगर इसके अलावा आंतरिक केवल निजी या संरक्षित होना चाहिए "? – Jesper

+0

मेरा मतलब था कि यह मेरे लिए तार्किक है, लेकिन जैसा कि लोग कहते हैं कि हमें कभी-कभी ऐसी कार्यक्षमता की आवश्यकता होती है – anderhil

उत्तर

12

आप आमतौर पर को सार्वजनिक नेस्टेड प्रकारों की आवश्यकता नहीं है - लेकिन वे कभी-कभी उपयोगी हो सकते हैं। वे इसे बहुत स्पष्ट करते हैं कि एक प्रकार स्पष्ट रूप से दूसरे के साथ जुड़ा हुआ है।

वे भी नेस्टेड प्रकार को संलग्न प्रकार (सी # में) के निजी सदस्यों तक पहुंचने की अनुमति देता है, जो कई बार उपयोगी हो सकता है। मैं अनुमान कि List<T>.Enumerator उदाहरण के लिए ऐसा कर सकता है। जावा में एक्सेस नियम दूसरे तरीके से काम करते हैं - संलग्न कक्षा में नेस्टेड कक्षाओं के निजी सदस्यों तक पहुंच होती है।

मुझे लगता है कि आप स्पष्ट रूप से को इस तरह की आवश्यकता के बजाय क्यों प्रतिबंधित करना चाहते हैं, यह समझाना होगा। मैं कहीं और नहीं सोच सकता कि आप एक एक्सेस संशोधक निर्दिष्ट कर सकते हैं लेकिन असंगतता के अलावा इसे सार्वजनिक बना सकता है (उदाहरण के लिए आंतरिक वापसी प्रकार के साथ सार्वजनिक विधि घोषित करना)।

+0

आप रॉक, जॉन! वास्तव में, भयानक स्पष्टीकरण –

+0

उत्तर के लिए धन्यवाद, अब यह मुझे स्पष्ट है। कारण मैंने इस सवाल से पूछा, क्योंकि मैंने देखा कि हमारे जूनियर डेवलपर ने कैसे घोंसला बनाया और वर्ग की विधि के लिए इसे पैरामीटर के रूप में इस्तेमाल किया। तो यह मेरे लिए अजीब लग रहा है, क्योंकि मैंने पहले कभी ऐसा कोड नहीं देखा था। OuterClass obj = new OuterClass(); obj.Method (OuterClass.InnerEnum.Value1); – anderhil

+1

"अजीब लग रहा है" किसी को अस्वीकार करने का कोई कारण नहीं है ;-) –

2

इस उदाहरण पर विचार:

public class TrainingFile { 

    public List<TrainingFileEntry> getEntries() { 
      return ... 
    } 

    public class TrainingFileEntry { 
     int x; 
     int y; 
    } 
} 

आप TrainingFileEntry का ब्यौरा छिपाने के लिए चाहते हैं, लेकिन अपने ग्राहक के लिए इसका इस्तेमाल करने में सक्षम होने की जरूरत है। ऑफक आप इस नेस्टेड क्लास के लिए अपनी फाइल बना सकते हैं, लेकिन इस तरह के नेस्टेड हेल्पर क्लास ज्यादातर "स्टैंडअलोन" नहीं हैं और कक्षा में फंस गए हैं जहां यह घोंसला है। -)

+0

उस पर +1 - मैं WPF नियंत्रणों के साथ बहुत कुछ के लिए इस तरह का उपयोग करता हूं, जिसमें आंतरिक भाग कक्षाओं (सूची प्रविष्टियां इत्यादि) के रूप में हो सकता है .... वास्तविक नामस्थान क्लीनर रखता है। – TomTom

0

यह बहुत उपयोगी है जब इनर क्लास के प्रत्येक सदस्य वास्तव में एक के हैं, और बाहरी वर्ग के केवल एक सदस्य हैं। मैंने उस निर्माण का उपयोग किया है जहां ऑउटर क्लास गणितीय वस्तुओं का संग्रह था और इनर क्लास वास्तविक वस्तुएं थीं।

3

लोक भीतरी प्रकार आम तौर पर सिफारिश कर रहे हैं नहीं, तो इस संदर्भ http://msdn.microsoft.com/en-us/library/tdz1bea9(v=VS.71).aspx

देखें ... लेकिन बाद से वहाँ (हो सकता है) अपवाद हैं, यह अभी भी अनुमति दी है

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