2011-10-13 16 views
14

क्या इस तरह की कक्षा (डिजाइन/दिशानिर्देश विशिष्ट) का उपयोग करना ठीक है? मैं एमवीवीएम पैटर्न का उपयोग कर रहा हूँ।पब्लिक कॉन्स स्ट्रिंग?

public static class Pages 
{ 
    public const string Home = "Home.xaml"; 
    public const string View2 = "View2.xaml"; 
    /* a few more... */ 
} 
+2

सार्वजनिक दृश्यता के लिए मैं 'स्थिर 'पढ़ने के लिए' स्थिर' पढ़ना पसंद करूंगा क्योंकि तब आप फिर से संकलन की आवश्यकता के बिना मूल्य को बदलने में सक्षम हैं। – mgronber

+3

@mgronber: यह संदर्भ पर निर्भर करता है। अधिकांश संदर्भों में मैंने विकसित किया है, यदि आप एक असेंबली को बदलते हैं तो आप नए संस्करण का उपयोग करने से पहले वैसे भी उस असेंबली के ग्राहकों को फिर से तैयार कर सकते हैं। –

उत्तर

24

वहाँ const और public static readonly के बीच महत्वपूर्ण अंतर हैं यह ऐलान करते हैं और आप जो देखभाल के साथ उपयोग करने के लिए विचार करना चाहिए: एक अलग में

("कोड से" ग्राहक "यहाँ, मेरा मतलब है विधानसभा सदस्य का जिक्र है।)

  • आप मूल्य बदल लेकिन ग्राहकों को पुन: संयोजित नहीं है, वे अभी भी अगर आप const का उपयोग मूल मान का उपयोग करेगा। public static readonly के साथ, वे अद्यतन मूल्य देखेंगे। आप पुनः संकलित हैं सभी ग्राहक किसी भी रास्ता, यह कोई समस्या नहीं है।
  • केवल const प्रपत्र एक संकलन समय स्थिर है, उस में इस्तेमाल किया जा सकता है जिसका अर्थ है:
    • तर्क गुण
    • स्विच बयान
    • वैकल्पिक पैरामीटर घोषणाओं

आप अगर ' यदि आप कभी भी मूल्य बदलते हैं, तो const का उपयोग करने के लिए दूसरे बुलेट बिंदु बिंदु के लाभों को अपने सभी ग्राहकों को पुन: संकलित करने में प्रसन्नता हो रही है।

बेशक, मुझे आश्चर्य है कि Pagesवास्तव में जरूरतों वैसे भी उन्हें सार्वजनिक कर दिया है कि क्या ... यह कुछ जो internal हो सकता है, internal सदस्यों के साथ की तरह लगता है - जिस बिंदु पर const की कमियां दूर पूरी तरह से चलते हैं।

2

एक सामान्य दिशानिर्देश जब स्थिर मान निर्धारित करने के लिए const का उपयोग कर। क्या इन स्थिरांकों को बाहरी असेंबली तक पहुंचाया जाना चाहिए? यदि नहीं तो के रूप में

internal static class Pages 
{ 
    public const string Home = "Home.xaml"; 
    public const string View2 = "View2.xaml"; 
    /* a few more... */ 
} 
+0

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

+0

@ जोन्स स्केट यह ऐसा कुछ नहीं था जिसे आपको केवल पढ़ने के लिए उपयोग करना चाहिए! मैंने पहले से ही एक प्रश्न के साथ एक सवाल पूछा है। मैं वास्तव में इस मामले में नहीं सोचता कि सार्वजनिक वर्ग आवश्यक है इसलिए मैंने आंतरिक वर्ग का उपयोग करने का सुझाव दिया। साथ ही, मैंने सोचा कि यह कैसे जानना उपयोगी है कि कैसे दृढ़ और पढ़ा जाता है; इसलिए, आइटम के लिए लिंक। वैसे भी, मुझे आपके द्वारा सुझाए गए सुझावों से सहमत होना चाहिए। :-) – AksharRoop

+2

ठीक है, आपने मूल रूप से कहा था "अगर इसे सार्वजनिक होने की आवश्यकता है, तो सार्वजनिक स्थैतिक रूप से पढ़ें।" अगर इस साइट को पढ़ने वाले व्यक्ति को प्रभावी सी # नहीं होता है, तो उन्हें उन मामलों में तत्काल ज्ञान प्राप्त नहीं होगा जहां वास्तव में यह * लागू नहीं है, भले ही यह सार्वजनिक हो। –

2

आपके प्रश्न के डिज़ाइन परिप्रेक्ष्य से, ऐसा लगता है कि यह सभी पृष्ठ संदर्भों को रखने के लिए एक स्थिर वस्तु का उपयोग करके गन्दा हो सकता है। क्या आप इसे वास्तविक पृष्ठ ऑब्जेक्ट में संग्रहीत नहीं कर सकते?

class view2 { 
    public const string PageName = "View2.xaml"; 

    ... other stuff ... 
} 

तो की तर्ज पर इसे कहते ...

goTo(view2.PageName); 
0

मुझे लगता है कि यह सबसे अच्छी चीजें आप कर सकते हैं में से एक है। कुछ और सुझाव: तारों के साथ const एस का उपयोग करने के लिए यह बिल्कुल ठीक है। यदि आप विभिन्न प्रकारों का उपयोग करना चाहते हैं, तो static readonly का उपयोग करें और फिर static कन्स्ट्रक्टर में प्रारंभ करें।

enums का उपयोग करके एक अलग दृष्टिकोण के लिए, this thread देखें। चूंकि आप जो करने की कोशिश कर रहे हैं, वह स्ट्रिंग एनम की तरह दिखता है, यह आपके लिए जाने का तरीका हो सकता है।

और यह न भूलें कि जब तक आप कोड में अपने पृष्ठों को निर्दिष्ट करते हैं, परिवर्तन करते हैं (उदाहरण के लिए एक पृष्ठ का नाम बदलना या स्थानांतरित करना) दर्द होगा। संसाधन या साइटमैप जैसे कुछ का उपयोग करने पर विचार करें। (मामले में आप केवल वर्ग एक पृष्ठ सूची के लिए उपयोग करते हैं, मैं सी # के दृढ़ता से संसाधनों द्वारा लिखे जाने वाले के साथ जाना चाहते हैं - वे अपने वर्ग के रूप में एक ही तरह से व्यवहार करेंगे और आप उन्हें कोड करने के लिए नहीं होगा हाथ से।)

संबंधित मुद्दे