मैं enums पर कुछ पढ़ रहा था और उन्हें निरंतर घोषित करने के समान था। मुझे कैसे पता चलेगा कि एक एनम या इसके विपरीत एक स्थिर का उपयोग करना है। एनम का उपयोग करने के कुछ फायदे क्या हैं?
मैं enums पर कुछ पढ़ रहा था और उन्हें निरंतर घोषित करने के समान था। मुझे कैसे पता चलेगा कि एक एनम या इसके विपरीत एक स्थिर का उपयोग करना है। एनम का उपयोग करने के कुछ फायदे क्या हैं?
जवाबों:
जब आप कुछ मानों को परिभाषित कर सकते हैं, तो एनम का उपयोग करें। रंग एक स्पष्ट उदाहरण है:
public enum Colour
{
White,
Red,
Blue
}
या शायद संभव चीजों का एक सेट जैसे: (उदाहरण के लिए मैं यहाँ से चुरा रहा हूँ क्योंकि मैं आलसी हूँ)
[FlagsAttribute]
enum DistributedChannel
{
None = 0,
Transacted = 1,
Queued = 2,
Encrypted = 4,
Persisted = 16,
FaultTolerant = Transacted | Queued | Persisted
}
पीआई की तरह, एक ही मूल्य के लिए लगातार होना चाहिए। पीआई मानों की कोई सीमा नहीं है, बस पीआई है।
विचार करने के लिए अन्य बिंदु हैं:
Type Safety"
अन्य उत्तरों से जो चीज गायब है, वह यह है कि एनमों का पूर्णांक आधार प्रकार है। आप चार को छोड़कर डिफ़ॉल्ट से किसी भी अन्य अभिन्न प्रकार के लिए डिफ़ॉल्ट बदल सकते हैं:
enum LongEnum : long {
foo,
bar,
}
आप आधार प्रकार से स्पष्ट रूप से और अंतर्निहित रूप से कास्ट कर सकते हैं, जो स्विच-स्टेटमेंट में उपयोगी है। आधार मान लें कि कोई व्यक्ति किसी भी प्रकार को आधार प्रकार का मान दे सकता है, भले ही एनम के पास उचित मूल्य वाला कोई सदस्य न हो। इसलिए एक स्विच में हमेशा डिफॉल्ट सेक्शन का उपयोग करना एक अच्छा विचार है। BTW, .NET स्वयं भी फ़्लोटिंग पॉइंट वैल्यू एनम की अनुमति देता है, लेकिन आप उन्हें C # में परिभाषित नहीं कर सकते, हालांकि मुझे लगता है कि आप अभी भी उन्हें (स्विच को छोड़कर) उपयोग कर सकते हैं।
इसके अलावा, एनम का उपयोग करने से आपको अधिक प्रकार की सुरक्षा मिलती है। यदि आप विधि मापदंडों के रूप में उदाहरणार्थ स्थिरांक का उपयोग करने का इरादा रखते हैं, तो मैं विधि को किसी भी अंतर मान के साथ कह सकता हूं। दी, कास्टिंग के माध्यम से यह भी एनम के साथ हो सकता है, लेकिन यह गलती से नहीं होगा। बदतर मापदंडों के क्रम को भ्रमित करने की संभावना है।
void method(int a, int b) {...}
यदि निरंतर A केवल A में जा सकता है और निरंतर B केवल b में जा सकता है, तो दो अलग-अलग enum प्रकारों का उपयोग संकलन के दौरान किसी भी दुरुपयोग को उजागर करेगा।
एक स्थिरांक एक भाषा विशेषता है जो कहती है कि चर मान को नहीं बदलेगा (इसलिए कंपाइलर उस ज्ञान के आस-पास अनुकूलन कर सकता है) जहां एक एनुम एक विशिष्ट प्रकार है।
लगातार कोई भी डेटा प्रकार हो सकता है लेकिन एक एनुम एक एनम है।
मैं किसी भी जगह का उपयोग करता हूं जहां आपके पास कई विकल्प हो सकते हैं और कोड की पठनीयता में सुधार करना चाहते हैं। यानी आप मान 0, 1, 2 के साथ इंट के रूप में या त्रुटि, चेतावनी और जानकारी के रूप में एक एनम के रूप में ट्रेस स्तर रख सकते हैं।
Enum की बिटवाइज ऑपरेटरों के रूप में उपयोग करने की क्षमता भी है, यानी FontStyle.Bold | FontStyle.Italic आपको बोल्ड और इटैलिक फॉन्ट देगा।
रॉबर्ट के जवाब के अलावा:
नामित मूल्यों के सीमित सेट के लिए एनम का उपयोग करें। आप वास्तव में प्रत्येक प्रतीक के पीछे संख्यात्मक मूल्य के बारे में परवाह नहीं करते हैं (लेकिन आप अभी भी उन्हें लगाने की क्षमता रखते हैं, उदाहरण के लिए एक विरासत प्रणाली के साथ संगतता के लिए)।
रॉबर्ट: हाँ, एनम का उपयोग बिट फ़ील्ड के रूप में किया जा सकता है। फ़्लैग्स विशेषता का उपयोग करें (और सुनिश्चित करें कि एनम के सदस्यों के पास उपयुक्त संख्यात्मक मान हैं)।
AC # स्थिरांक एक चर के समान है जिसमें यह एक मान को परिभाषित नाम देता है। हालांकि, एक मानक चर से एक निरंतर भिन्न होता है क्योंकि एक बार परिभाषित होने के बाद, निरंतर को निर्दिष्ट मूल्य कभी नहीं बदला जा सकता है। स्थिरांक का मुख्य लाभ स्व-दस्तावेजीकरण कोड बनाने के साथ-साथ एक ही स्थान पर प्रमुख मूल्यों की घोषणा की अनुमति देने में उनकी सहायता है, जो आसान रखरखाव की अनुमति देता है मूल्य को अद्यतन करने की आवश्यकता है और सॉफ्टवेयर को पुन: संकलित किया जाना चाहिए।
जबकि एन्यूमरेटर सूचियाँ अनुक्रमों और राज्यों को परिभाषित करने के लिए उपयोगी हैं, खासकर जब उन राज्यों के माध्यम से एक प्राकृतिक प्रगति हो। ऐसा इसलिए है क्योंकि सूची में प्रत्येक स्थिरांक को प्रारूपित किया जा सकता है और इसकी तुलना उनके नाम या मूल्य का उपयोग करके की जा सकती है। सीमित मानों के सीमित सेट को परिभाषित करने के लिए एक एनुम का उपयोग किया जा सकता है।
enum
इसके बजाय उपयोग करते समय एक बात जो मुझे अच्छी const
लगती है enum
, वह यह है कि आप ए में मूल्यों के माध्यम से पुनरावृत्ति कर सकते हैं , const
मूल्यों के साथ ऐसा करना बहुत कठिन है ।