2008-10-17 12 views
37

एक ऐसी कक्षा का उपयोग करते समय जिसमें एनम संपत्ति है, आमतौर पर संपत्ति के नाम और enum प्रकार के बीच एक नामकरण संघर्ष मिलता है। उदाहरण:एनम और संपत्ति नामकरण संघर्ष

enum Day{ Monday, Tuesday, ... } 

class MyDateClass 
{ 
    private Day day; 

    public Day Day{ get{ return day; } } 
} 

के बाद से ही झंडे enums बहुवचन नाम, नामकरण enum "दिन" होना चाहिए एक गैर झंडा enum के लिए जाने का रास्ता नहीं है। उपर्युक्त उदाहरण में आप enum या संपत्ति के लिए "सप्ताहांत" जैसी कुछ भिन्नता का उपयोग कर सकते हैं। लेकिन सामान्य मामले में इस तरह की कोई अच्छी भिन्नता नहीं है, इसलिए आप फू और बार प्रकार के enum गुणों वाले किसी ऑब्जेक्ट के लिए "FooMode" या "BarKind" जैसी गुणों का उपयोग कर समाप्त कर देते हैं। इतना सुरुचिपूर्ण नहीं है।

आप आमतौर पर इस परिदृश्य में enums और गुणों का नाम कैसे देते हैं?


त्वरित प्रतिक्रियाओं के लिए धन्यवाद। एक और सवाल: सार्वजनिक enums घोंसला करने की सिफारिश क्यों नहीं है, और यदि आप सार्वजनिक enams घोंसला करना चाहते हैं तो आप नामकरण मुद्दों को कैसे हल करते हैं?

class Vehicle 
{ 
    enum Kind{ Car, Bike } 

    public Kind Kind{ get{ return ... } } 
} 

class Meal 
{ 
    enum Kind{ Dessert, MainCourse } 

    public Kind Kind{ get{ return ... } } 
} 

ऊपर परिदृश्य में, यह देखते हुए कि भोजन और वाहन शेयर एक ही नाम स्थान, मैं स्थानांतरित नहीं कर सकते "प्रकार" वर्गों में से या तो बाहर क्रमशः यह MealKind का नाम बदलने और VehicleKind बिना। मुझे

myVehicle.Kind = Vehicle.Kind.Car 

जैसा दिखता है लेकिन यह गाइडलाइन की सिफारिश नहीं है। यहां सबसे अच्छा अभ्यास क्या होगा? नेस्टेड सार्वजनिक enums का उपयोग कभी नहीं करें और इसके बजाय उन्हें VehicleKind आदि नाम दें?

+0

यह एक नेस्टेड परिदृश्य में काम नहीं करेगा। फिर स्पष्ट रूप से एक नाम संघर्ष है। मैं इस मामले में 'उपयोग' उपनाम का उपयोग करने का भी विचार नहीं करता हूं। – leppie

+1

नेस्टेड enums कोड को लंबे समय तक बनाते हैं और कक्षा से बारीकी से बंधे हैं। ओह, और आपके उदाहरण में, आप कार और बाइक को वाहन और मिठाई और मेनकर्स से भोजन से प्राप्त करना चाहते हैं, इसलिए एनम के लिए कोई ज़रूरत नहीं है :) – OregonGhost

+0

मान लीजिए कि आपको enum की आवश्यकता है (यानी इस प्रकार को एक मान के रूप में उपयोग किया जाना चाहिए, न कि एक उप-वर्ग), क्या वाहन के नाम जैसे वाहन नाम से पहले बहुत सारे enums prefixed होने के बजाय सार्वजनिक घोंसला वाले enums के लिए यह अच्छा नहीं है? उदाहरण के लिए, कक्षा का नाम बदलने पर, केवल उस वर्ग से संबंधित सभी enums का नाम बदला जाना चाहिए ... – AndersF

उत्तर

8

जब तक गणना MyDateClass के भीतर घोंसला नहीं है, मुझे नहीं लगता कि यह एक समस्या है। यह असामान्य (मेरे अनुभव में) से बहुत दूर है, जिस तरह से एक ही नाम है, जिस प्रकार यह लौटाता है। मैं अगर मैं ढांचे में कुछ उदाहरण मिल सकते हैं देखेंगे ...

संपादित करें: सबसे पहले उदाहरण: DateTimeOffset.DateTime (नहीं एक enum, लेकिन वह कुछ हद तक अप्रासंगिक है)

+0

यह है वेब सेवा उत्सर्जित कक्षाओं के लिए काफी आम है। – leppie

29

कोई विवाद नहीं है। वास्तव में, .NET Framework style guide encourages you to do this, उदा। यदि आपके पास ऐसी कक्षा है जिसमें एक प्रकार की एक संपत्ति है (चाहे एनम या कक्षा चाहे कोई फर्क नहीं पड़ता), तो आपको इसे वही नाम देना चाहिए। विशिष्ट उदाहरण रंग रंग की एक रंग संपत्ति है। यह ठीक है, जब तक कि दो रंग न हों - उस स्थिति में दोनों को रंग और बैककॉलर के बजाय नाम (यानी बैककोलर और फोरकोलर) में कुछ जोड़ना चाहिए।

+0

मेरे दिमाग में इसका कैननिकल उदाहरण डीबीकॉमैंड है। कमांड टाइप टाइप कमांड टाइप टाइप किया जा रहा है। –

+8

ध्यान दें कि यह काम नहीं करता है जब enum फ़ील्ड घोषित करता है जो enum फ़ील्ड घोषित करता है, जैसा कि अन्य उत्तरों में उल्लिखित है। – yoyo

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