दिलचस्प पोस्ट
Android.os.SystemProperties कहां है? कौन सा पायथन स्मृति प्रोफाइलर की सिफारिश की है? printf ("% p") और कास्टिंग (शून्य *) जावा में किसी ऑब्जेक्ट की स्मृति स्थान कैसे प्राप्त कर सकता हूं? प्रत्येक दूसरे पर निर्भर गुणों को कैसे प्रारंभ करें मोंगोडब समूह मान कई क्षेत्रों के द्वारा मूल्य एक्सेल नंबर स्वरूप: "" क्या है? एएसपी.नेट एमवीसी में एचटीएमएल -5 डेटा- एट्रिब्यूट्स में डैश कैसे उपयोग करें I घातक त्रुटि: अनचाहे त्रुटि: अपरिभाषित फ़ंक्शन के लिए कॉल mysql_connect () जहां हालत नल का उपयोग करते हुए रेलगाड़ी रेल करता है जावास्क्रिप्ट: रद्द करें / छवि अनुरोध बंद करो एक MKMapView की सीमाएं प्राप्त करना PostgreSQL में सिंगल कोट्स के साथ टेक्स्ट सम्मिलित करें फ़ाइल बनाने के लिए एजेक्स के माध्यम से ब्लाको पास करें गोलाकार कोनों और पारदर्शिता के साथ सीमा

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

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

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

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

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

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