2013-02-19 60 views
10

मैं कैसे enum की तरह वर्ग कि संख्या के बजाय स्ट्रिंग मान बनाने के लिए पर एक सबसे अच्छा अभ्यास के लिए देख रहा हूँ। कुछ इस तरह:Enum की तरह वर्ग

public static class CustomerType 
{ 
    public static string Type1 = "Customer Type 1"; 
    public static string Type2 = "Customer Type 2"; 
} 

मैं सभी मामलों में जहां मैं CustomerType की जरूरत के लिए एक मूल्य के रूप में आवेदन भर में इस वर्ग का प्रयोग करेंगे। मैं एनम का उपयोग नहीं कर सकता क्योंकि यह विरासत प्रणाली है, और इस तरह के मूल्य हर जगह हार्डकोड किए जाते हैं, मैं बस उन्हें एक ही स्थान पर केंद्रीकृत करने की कोशिश कर रहा हूं।

प्रश्न ऊपर के उदाहरण में, है, मैं एक चर घोषित करने के लिए उपयोग करना चाहिए:

  1. स्थिर रीड-ओनली कीवर्ड
  2. स्थिरांक कीवर्ड
  3. या सिर्फ स्थिर

क्या होगा इन प्रकार के वर्गों और मूल्यों को स्थापित करने का सबसे अच्छा अभ्यास?

+2

http://stackoverflow.com/questions/3190870/const-string-vs-static-string-in-c-sharp देखें। – nneonneo

उत्तर

13

आपको सादा static का उपयोग करना चाहिए क्योंकि खेतों को अनजाने में संशोधित किया जा सकता है और रहस्यमय टूटने का कारण बन सकता है। इसलिए, आपके दो विकल्प static readonly और const हैं।

const संकलन-समय पर कॉलिंग कोड में परिवर्तनीय मान को एम्बेड करने का कारण बन जाएगा, जो पुरानी हार्डकोडेड कोड (लेकिन प्रतीकात्मक स्थिरता के लाभ के साथ) के बराबर प्रभावी होगा। const का खतरा है कि आप सब कुछ एक const परिवर्तन, ऐसा न हो कि आप बाहर के सिंक स्थिरांक और मुश्किल कीड़े के साथ खत्म करता है, तो पुन: संयोजित करना चाहिए।

static readonly एक सामान्य क्षेत्र का उपयोग में परिणाम होगा, तो आप तुल्यकालन मुद्दों नहीं होगा। हालांकि, अगर आप अतिरिक्त क्षेत्र पहुंच के कारण एक मामूली प्रदर्शन हिट लग सकता है (हालांकि यह unnoticeable होने की संभावना है जब तक आप इन क्षेत्रों प्रदर्शन के लिए महत्वपूर्ण कोड में एक बहुत का उपयोग करें)। यदि आपको लगता है कि भविष्य में आपको किसी बिंदु पर तारों को बदलना होगा, तो आप static readonly का उपयोग करना चाहेंगे।

यह की आवाज़ से, मूल्यों शायद ही कभी पर्याप्त है कि const एक सुरक्षित शर्त है बदल जाएगा। हालांकि, अंतिम निर्णय आपके ऊपर है।

2

आप सी # का उपयोग कर रहे हैं, तो क्यों नहीं एक enum बना सकते हैं और सेट string आधारित Description के रूप में नीचे enum मूल्यों के लिए attribute:

public enum CustomerType 
{ 
    [System.ComponentModel.Description("Customer Type 1")] 
    Type1, 

    [System.ComponentModelDescription("Customer Type 2")] 
    Type2 
} 

उसके बाद, आप नीचे के रूप में enum मूल्यों की Description मूल्य प्राप्त कर सकते हैं:

int value = CustermType.Type1; 
string type1Description = Enums.GetDescription((CustomerType)value); 

लिए विभिन्न अन्य तरीकों enum की Description विशेषता मान प्राप्त करने के लिए, इस 012 देखें

+3

यह भी "hacky" है, यह सीधे आगे आप अतिरिक्त कास्टिंग करने की ज़रूरत नहीं है, कोड स्पष्ट नहीं है। आप Enums.GetDescription ((ग्राहक प्रकार) CustermType.Type1 की तरह भी कर सकते हैं); लेकिन क्या बिंदु है अगर मैं इसे स्ट्रिंग CustermType.Type1String के साथ आगे बढ़ सकता है। वैसे भी धन्यवाद, मुझे विवरण विशेषता के बारे में पहले पता नहीं था :) –