2014-12-18 7 views
5

मैं इन दो स्थितियों पर विचार कर रहा हूँ:नामस्थान बनाम घोंसले वर्ग

class StructuralCase 
{ 
    class Structure 
    { 
     ... 
    } 
    class Material 
    { 
     ... 
    } 
    class Forces 
    { 
     ... 
    } 
} 

और

namespace StructuralCase 
{ 
    class Structure 
    { 
     ... 
    } 
    class Material 
    { 
     ... 
    } 
    class Forces 
    { 
     ... 
    } 
} 

बात यह है कि अंदर "StructuralCase" मैं किसी भी उदाहरण चर घोषित नहीं किया जाएगा, है जैसे, यह शेष वर्गों के लिए "माता-पिता" के रूप में कार्य करेगा।

इससे मुझे स्ट्रक्चरल क्लास को नामस्थान में परिवर्तित करने पर विचार करना पड़ता है। तुम उसके बारे में क्या सोचते हो? क्या कोई कठोर नियम है?

+1

क्या आप नेस्टेड कक्षाओं की दृश्यता को सीमित करने की कोशिश कर रहे हैं? आप घोंसले पर विचार क्यों कर रहे हैं? – BradleyDotNET

+0

अभिभावक वर्ग? आप आंतरिक कक्षाओं के साथ एक कक्षा का मतलब है? मैंने सोचा कि यह सिर्फ जावा में संभव था ... – nbro

+0

@ एनब्रो नेस्टेड कक्षाएं सी # भी –

उत्तर

4

आपके पास दो अलग-अलग चीजें हैं।

पहले परिदृश्य class example: आप कोई घोंसले के साथ 3 आंतरिक स्वतंत्र वर्ग

:

आप अपने दूसरे परिदृश्य namespace example में 3 नेस्टेड निजी कक्षाएं

के साथ एक आंतरिक वर्ग की है।

यदि कक्षाओं का उपयोग केवल StructuralCase के भीतर किया जाना चाहिए तो पहले उदाहरण का उपयोग करें, अन्यथा यदि कक्षाएं स्वतंत्र हैं और उनके कोई रिश्ते नहीं हैं तो नामस्थान आगे बढ़ने का तरीका है।

+1

सरल और प्रभावी। मुझे पता था कि यह खाते में नहीं था। मैं "नेमस्पेस" के लिए जाऊंगा क्योंकि ये क्लिक्स एक-दूसरे से संबंधित नहीं हैं। –

2

मैं सिर्फ नेमस्पेस का उपयोग करूंगा, क्योंकि आप कक्षा के सभी उपरिवृत्त नहीं हैं।

एक वर्ग में अधिक संरचना, चर, और विधियां हैं, और विरासत की परतें प्रदान करती हैं, लेकिन यदि आपको उनकी आवश्यकता नहीं है, तो कक्षा का उपयोग न करें।

+1

स्टैक ओवरफ्लो में आपका स्वागत है! मैं देखता हूं कि आप जवाब देने वाले पहले थे, और इसके लिए एक, लेकिन अन्य उत्तरों ने थोड़ा और विस्तार किया। लेकिन यह एक अच्छा पहला जवाब था। चीयर्स! –

2

आम तौर पर, आप namespace का उपयोग करना चाहते हैं, अगर केवल using कथन सक्षम करता है - अन्यथा आपको सभी नेस्टेड कक्षाओं (कक्षा के माता-पिता के अंदर छोड़कर) को कक्षा में संदर्भित करना होगा। इस प्रकार के मामले 1 में, बाहर संदर्भ होता

StructuralCase.Structure s = ... 
बजाय

using StructuralCase; 
// ... 
Structure s = ... 

कार्यात्मक केवल असली कारण कहने के लिए एक नेस्टेड वर्ग

  • ताकि नेस्टेड है बनाने के लिए प्रकार के माता-पिता के गैर-सार्वजनिक सदस्यों तक पहुंच है (और आप किसी कारण से internal से नफरत करते हैं)
  • ताकि उप-वर्ग अभिभावक वर्ग (जैसे एक विशिष्ट struct किसी विशिष्ट क्वेरी के परिणामों के लिए उपयोग किया जा सके)
  • ताकि बच्चे वर्ग कुछ जेनेरिक पैरामीटर्स को मूल वर्ग से साझा कर सके (जैसे फैक्ट्री क्लासेस जेनेरिक प्रकार।)
संबंधित मुद्दे