दिलचस्प पोस्ट
CMake में सामान्य संकलन झंडे सेट करने के लिए आधुनिक विधि क्या है? HTTP POST अनुरोध की वर्ण एन्कोडिंग का पता लगा रहा है पहचान द्वारा किसी वस्तु को संदर्भित करने का मानक तरीका (के लिए, उदाहरण के लिए, परिपत्र संदर्भ)? एएनटीएलआर में 'सिमेंटिक स्पिटकेंट' क्या है? छवियों के साथ Android HTML.fromHTML ()? SQL सर्वर 2008 का प्रयोग करते वक्त मैं एक से अधिक मामले कैसे करूं? एक्सेल में किसी भिन्न फ़ॉन्ट रंग का पाठ कैसे गिनें स्ट्रिंग का हैशोड () कैश 0 क्यों नहीं करता है? ऑपरेटर ओवरलोडिंग और जावा में ओवरराइडिंग डोमेन पर एक जावास्क्रिप्ट कुकी बनाने और इसे उप डोमेन भर में पढ़ना StackOverflow के इनपुट टैग की तरह jQuery के स्वत: पूर्ण टैगिंग प्लग-इन? कैसे प्रयोक्ता परिभाषित तालिका प्रकार के रूप में संग्रहीत सी # में प्रक्रियाकृत पैरामीटर पारित करने के लिए जावा में डुप्लिकेट एचटीएमएल टैग को कैसे हटाएं? जाओ – पार्सिंग की तारीख / समय स्ट्रिंग जो 'मानक' स्वरूप नहीं हैं नोडजेएस बेस 64 इमेज एन्कोडिंग / डिकोडिंग काफी काम नहीं कर रहा है

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

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

शायद मैं उनका लक्ष्य समझ नहीं पा रहा हूं मेरे लिए, आंतरिक कक्षाएं – कम से कम निजी आंतरिक कक्षाएं – पास्कल / मोडुला -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() { } } } 

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

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

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

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

 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. इंटरफेस के सदस्य के रूप में नेस्टेड प्रकार को परिभाषित न करें।

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

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

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