दिलचस्प पोस्ट
क्या आप एक विंडोज़ अनुप्रयोग में asp.net सदस्यता प्रदाता का उपयोग कर सकते हैं? HttpServletRequest – संदर्भ URL प्राप्त करने के लिए कैसे? कैसे माँगोडब में स्ट्रिंग को संख्यात्मक मानों में कनवर्ट करना Android में ResultReceiver का उपयोग करना जावास्क्रिप्ट: पता कैसे करें कि उपयोगकर्ता ब्राउज़र क्रोम है? पूर्व- iOS7 UINavigationController pushViewController एनीमेशन को पुनर्स्थापित करें प्रोग्राम को libgcc_s_dw2-1.dll नहीं मिल सकता एक वेब पेज के लोड और निष्पादन अनुक्रम? एक कंटेनर व्यू के भीतर समान रूप से अंतरिक्ष के कई विचार डिवि वर्ग बनाम आईडी सी में फ़ंक्शन प्रोटोटाइप घोषित करना आवश्यक है? अजगर – स्थानीय डेटटाइम के लिए UTC डेटटाइम स्ट्रिंग कन्वर्ट करें पायथन 3.2 urllib2 आयात करने में असमर्थ (आयातई त्रुटि: urllib2 नामक कोई मॉड्यूल नहीं है) आईफ़ोन – ऊँचाई की गणना करने के लिए कब तालिका दृश्य के लिए फोरेरूएटएक्सपैथ जब प्रत्येक सेल ऊंचाई गतिशील है? Xcode 6 VECTOR छवि संपत्ति की अनुमति देता है … किसी भी विचार का उपयोग कैसे करें?

सी # में निजी आंतरिक कक्षाएं – वे अधिक बार क्यों नहीं इस्तेमाल की जाती हैं?

मैं सी # के लिए अपेक्षाकृत नया हूं और हर बार जब मैं सी # प्रोजेक्ट पर काम करना शुरू करता हूं (केवल सी # में लगभग परिपक्व प्रोजेक्ट्स पर काम किया है) मुझे आश्चर्य है कि क्यों कोई आंतरिक कक्षा नहीं है?

शायद मैं उनका लक्ष्य समझ नहीं पा रहा हूं मेरे लिए, आंतरिक कक्षाएं – कम से कम निजी आंतरिक कक्षाएं – पास्कल / मोडुला -2 / एडा में "आंतरिक प्रक्रिया" की तरह बहुत कुछ दिखती हैं: वे समझने में आसानी के लिए छोटे भागों में एक मुख्य वर्ग को तोड़ने की अनुमति देते हैं।

उदाहरण: यहां ज्यादातर समय दिखाई देता है:

public class ClassA { public MethodA() { <some code> myObjectClassB.DoSomething(); // ClassB is only used by ClassA <some code> } } public class ClassB { public DoSomething() { } } 

चूंकि क्लासबी का उपयोग केवल क्लास द्वारा (थोड़ी देर तक) के लिए किया जाएगा, मेरा अनुमान है कि इस कोड को बेहतर तरीके से अनुसरण किया जाएगा:

  public class ClassA { public MethodA() { <some code> myObjectClassB.DoSomething(); // Class B is only usable by ClassA <some code> } private class ClassB { public DoSomething() { } } } 

मुझे इस विषय पर आपके द्वारा सुनने में खुशी होगी – क्या मैं सही हूं?

वेब के समाधान से एकत्रित समाधान "सी # में निजी आंतरिक कक्षाएं – वे अधिक बार क्यों नहीं इस्तेमाल की जाती हैं?"

नेस्टेड कक्षाएं (संभवतः सी # में नेस्टेड क्लास के रूप में "इनर" से बचने के लिए सबसे अच्छा है, जावा में आंतरिक कक्षाओं के लिए कुछ अलग है) वास्तव में बहुत उपयोगी हो सकता है

एक पैटर्न जिसका उल्लेख नहीं किया गया है "बेहतर एन्यूम" पैटर्न – जो जावा में एक से अधिक लचीला हो सकता है:

 public abstract class MyCleverEnum { public static readonly MyCleverEnum First = new FirstCleverEnum(); public static readonly MyCleverEnum Second = new SecondCleverEnum(); // Can only be called by this type *and nested types* private MyCleverEnum() { } public abstract void SomeMethod(); public abstract void AnotherMethod(); private class FirstCleverEnum : MyCleverEnum { public override void SomeMethod() { // First-specific behaviour here } public override void AnotherMethod() { // First-specific behaviour here } } private class SecondCleverEnum : MyCleverEnum { public override void SomeMethod() { // Second-specific behaviour here } public override void AnotherMethod() { // Second-specific behaviour here } } } 

हम इनमें से कुछ करने के लिए स्वचालित रूप से कुछ भाषा समर्थन के साथ कर सकते हैं – और यहां बहुत सारे विकल्प हैं जो मैंने यहां नहीं दिखाए हैं, जैसे कि सभी मानों के लिए वास्तव में नेस्टेड क्लास का उपयोग नहीं करना, या एकाधिक मूल्यों के लिए समान नेस्टेड क्लास का उपयोग करना, लेकिन उन्हें अलग-अलग कन्स्ट्रक्टर पैरामीटर देना लेकिन मूलतः, तथ्य यह है कि नेस्टेड क्लास निजी कन्स्ट्रक्टर को कॉल कर सकता है बहुत सी शक्ति देता है

फ़्रेमवर्क डिज़ाइन दिशानिर्देशों में नेस्टेड कक्षाओं का उपयोग करने के लिए सर्वोत्तम नियम हैं जो मुझे आज तक मिल चुके हैं।

यहाँ एक संक्षिप्त सारांश सूची है:

  1. नेस्स्टेड प्रकारों का उपयोग करें जब प्रकार और नेस्टेड प्रकार के बीच संबंध ऐसा सदस्य-पहुंच सिमेंटिक वांछित हैं

  2. लॉजिकल समूह निर्माण के रूप में सार्वजनिक नेस्टेड प्रकारों का उपयोग करें

  3. सार्वजनिक रूप से उजागर हुए नेस्टेड प्रकारों का उपयोग करने से बचें

  4. यदि प्रकार को युक्त प्रकार के बाहर संदर्भित होने की संभावना है तो नेस्टेड प्रकारों का उपयोग करें

  5. नेस्टेड प्रकारों का उपयोग करें यदि उन्हें क्लाइंट कोड द्वारा तत्काल उपयोग करने की आवश्यकता होती है।

  6. इंटरफेस के सदस्य के रूप में नेस्टेड प्रकार को परिभाषित न करें।

आपको प्रत्येक वर्ग की ज़िम्मेदारियों को सीमित करना चाहिए ताकि प्रत्येक व्यक्ति सरल, परीक्षण योग्य और पुन: प्रयोज्य रह सके । निजी आंतरिक कक्षाएं उसके खिलाफ चलती हैं वे बाहरी कक्षा की जटिलता में योगदान करते हैं, वे परीक्षण योग्य नहीं होते हैं और वे पुन: प्रयोज्य नहीं होते हैं

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

अन्यथा, यह वास्तव में इन कक्षाओं को ढूंढने के लिए परियोजना पर काम करने वाले अन्य डेवलपर्स के लिए भ्रम का कारण हो सकता है, क्योंकि वे यह नहीं जानते कि वे कहां हैं।