2010-05-31 9 views
15

समूह स्थिरांक में नेस्टेड कक्षाओं का उपयोग करने में क्या गलत है?स्थिरांक के लिए नेस्टेड कक्षाओं का उपयोग करना?

तो जैसा:

public static class Constants 
{ 
    public static class CategoryA 
    { 
     public const string ValueX = "CatA_X"; 
     public const string ValueY = "CatA_Y"; 
    } 
    public static class CategoryB 
    { 
     public const string ValueX = "CatB_X"; 
     public const string ValueY = "CatB_Y"; 
    } 
} 

इसलिए की तरह उपयोग किया:

Console.WriteLine(Constants.CategoryA.ValueY); 
Console.WriteLine(Constants.CategoryB.ValueX); 

तुम भी स्तरीय आंशिक "स्थिरांक" कर सकता है ...

उत्तर

17

कुछ guideline है सार्वजनिक नेस्टेड वर्गों के खिलाफ (fx 4.5 के लिए अद्यतन):

√ नेस्टेड प्रकार का उपयोग करते जब नेस्टेड प्रकार और उसके बाहरी प्रकार के बीच संबंधों को ऐसी है कि सदस्य पहुंच अर्थ विज्ञान वांछित हैं ।

एक्स सार्वजनिक रूप से उजागर किए गए नेस्टेड प्रकारों से अवगत कराया गया। इसका एकमात्र अपवाद यह है कि अगर नेस्टेड प्रकार के चर को केवल उप-परिदृश्य या अन्य उन्नत अनुकूलन परिदृश्य जैसे दुर्लभ परिदृश्यों में घोषित किया जाना चाहिए।

एक्स उस प्रकार के प्रकार के बाहर संदर्भित होने की संभावना होने पर नेस्टेड प्रकारों का उपयोग न करें।

मुझे लगता है कि आपका उदाहरण पहले बिंदु से मेल खाता है (यानी: आप अच्छे हैं)।

+0

सुनना बहुत अच्छा है, इस विचार का उपयोग क्यों अधिक व्यापक नहीं है - मैं केवल यही नहीं हो सकता जिसने इसके बारे में सोचा? – antirysm

+0

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

+1

बहुत सारे स्थिरांक निश्चित रूप से खराब डिजाइन का संभावित संकेत हैं; हालांकि मेरे मामले में हम शेयरपॉइंट के बारे में बात कर रहे हैं जो स्थिरांक का उपयोग करता है। – antirysm

4

कौन यह गलत था कहा? एक वर्ग पदानुक्रम में कहीं भी कॉन्स्टेंट (और हैं) परिभाषित किया जा सकता है।

+0

हाँ, मुझे लगता है कि यह बहुत साफ है - लेकिन मैं यह इसलिए किया कि मैं उस पर शक कर रहा हूँ नहीं देखा है कुछ साइड इफेक्ट्स हैं ... – antirysm

+1

मुझे लगता है कि यह स्थिरांक के बारे में नहीं है लेकिन घोंसला वाले वर्ग हैं। –

+1

वास्तव में नेस्टेड क्लासेस का उपयोग करने के लिए स्थिरांक आपको पूरी तरह ओवरराइड करने या उप-वर्गों के लिए विस्तारित करने की अनुमति देता है। अवधारणा में अतिरिक्त लाभ है। – Aren

2

नहीं कह रही है कि तुम क्या किया वह गलत है, लेकिन इस तरह के बजाय नामस्थान का उपयोग कर के बारे में क्या:

namespace Constants 
{ 
    public static class CategoryA 
    { 
     public const string ValueX = "CatA_X"; 
     public const string ValueY = "CatA_Y"; 
    } 
    public static class CategoryB 
    { 
     public const string ValueX = "CatB_X"; 
     public const string ValueY = "CatB_Y"; 
    } 
} 
+0

यूप, जो आपके पास दो स्तरों पर काम करेगा - श्रेणी और मूल्य लेकिन नेस्टेड कक्षाओं के साथ आप स्तरों की अनंत संख्या जोड़ सकते हैं; यानी भाषाएं। अंग्रेजी। अमेरिकन = "एन-यूएस"। – antirysm

+0

(अतिरिक्त नामस्थान जोड़ने के बिना मुझे जोड़ना चाहिए ...) – antirysm

+1

लेकिन नामस्थान क्यों नहीं जोड़ते? कुछ परिस्थितियों में जो बेहतर हो सकता है, आप किसी अन्य फ़ाइल/असेंबली में एनएस में जोड़ सकते हैं। –