Enum in C#: Enumeration या Enum एक Programmer-Defined Type होता है और Array, Structure, Class आदि की तरह ही ये भी एक Reference Type ही होता है। जब हम कोई .NET Application Create करते हैं, तो कुछ Specific Numerical Values के Set को कुछ निश्चित Symbolic Names के साथ Map करने के लिए हम enum Type का प्रयोग करते हैं।
enum Type का प्रयोग करके वास्तव में हम Application Related विभिन्न Numerical मानों को एक निश्चित नाम दे देते हैं और पूरे Application के दौरान जहां पर भी हमें उन Numerical मानों की जरूरत होती है, हम उन मानों के लिए Set किए गए enum Symbolic Name को Use कर लेते हैं, क्योंकि नामों को याद रखना, मानों को याद रखने की तुलना में काफी आसान होता है।
enum Type को वास्तव में हम Name/Value Pair के रूप में समझ सकते हैं। चूंकि enum वास्तव में Internally Value Type होता है, इसलिए इसके Data को Directly enum Definition में ही Specify कर दिया जाता है। साथ ही enum Type में Integer Numbers के साथ Named Constants को Setup किया जाता है। इसे समझने के लिए हम निम्नानुसार एक उदाहरण Program देख सकते हैं:
// File Name: ObjectClone.cs using System; namespace CSharpIntermediateConstructsEnum { enum DaysByName { Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday } class Enum { static void Main(string[] args) { DaysByName today = DaysByName.Sunday; Console.WriteLine("Today is : {0}", today); } } } // Output: Today is: Sunday
जब हम एक बार enum Type Create कर लेते हैं, तो उस enum Type के भी हमें Exactly वैसे ही Object Create करने होते हैं, जिस तरह से हम Class के Object Create करते हैं और क्योंकि सभी enum Type Data वास्तव में किसी Numerical Value को ही Constant के रूप में Represent करते हैं।
इसलिए जहां कहीं भी हमें किसी Constant को Use करना हो, वहां हम enum Type के Data को Use कर सकते हैं, जैसाकि उपरोक्त उदाहरण में हमने DaysByName नाम के enum Type के Object today को DaysByName.Sunday Constant मान से Set किया है।
हालांकि enum Type द्वारा हम Constant Integer Values के साथ एक Constant नाम Assign करते हैं, लेकिन फिर भी हम enum Type के मान को Directly किसी Numerical Calculation में Use नहीं कर सकते, क्योंकि enum Type Definition में Specified मान वास्तव में Integer Type के नहीं बल्कि enum Type के होते हैं। इसलिए enum Type के मान को किसी Calculation में Use करते समय हमें इन्हें Appropriate Casting के साथ Use करना जरूरी होता है। जैसे:
// File Name: EnumWithCasting.cs using System; namespace CSharpIntermediateConstructsEnum { enum DaysByName { Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday } class EnumWithCasting { static void Main(string[] args) { Console.WriteLine("4 * 6 = {0}", (int)DaysByName.Thursday * (int)DaysByName.Saturday); } } } // Output: 4 * 6: 24
चूंकि हमारे उदाहरण में enum Constant नाम Thursday वास्तव में Integer Value 4 के साथ तथा Constant नाम Saturday वास्तव में Integer Value 6 को Represent कर रहा है, इसलिए इन दोनों का गुणा किया जाना सम्भव है। लेकिन दो enum Constants का यदि आपस में गुणा किया जाता है, तो वास्तव में इनका गुणा उसी स्थिति में सम्भव है, जबकि ये किसी Numerical Value से Associated हो।
Default रूप से enum Type के सभी Data एक Zero Based Integer Value से Associated होते हैं। इसलिए जब enum Type के Data को किसी तरह के Arithmetical Calculation में Use किया, जैसाकि इस उदाहरण में किया गया है, तो निम्नानुसार Statement की तरह ही हमें हर enum Numerical Value को एक Integer Value में Convert करना जरूरी होता है:
Console.WriteLine(“4 * 6 = {0}”, (int)DaysByName.Thursday * (int)DaysByName.Saturday);
जब हम enum Type Create करते हैं, तब Default रूप से सभी enum Constants की Numbering 0 से शु: होती है। लेकिन हम हमारी जरूरत के अनुसार किसी भी Numerical मान से enum Type की Numbering Start कर सकते हैं। जैसे:
// File Name: EnumManualNumberSetup.cs using System; namespace CSharpIntermediateConstructsEnum { enum MonthName { Jan = 1, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec } class EnumManualNumberSetup { static void Main(string[] args) { DateTime today = new DateTime(2013, (int)MonthName.May, 10); Console.WriteLine("Date of Today: {0}", today); } } } // Output: Date of Today: 5/10/2013 12:00:00 AM
इस उदाहरण में हमने MonthName नाम का एक enum Type Create किया है और उसके Constant Values की शु:आत Jan=1 करके Default मान 0 के स्थान पर 1 से की है। इसीलिए MonthName.May का मान 5 प्राप्त हो रहा है, जबकि Default रूप से इसका मान 4 होना चाहिए।
enum Type Create करते समय हम हमारी सुविधानुसार एक या एक से ज्यादा enum Constants को Values Set कर सकते हैं। हम enum Type में जिस enum Constant को Value Assign कर देते हैं, उससे आगे के सभी Constants को पिछली Value से एक Incremented Value Assign हो जाता है। जैसे:
enum FaceCards { // Member // Value assigned Jack = 11, // 11 - Explicitly set Queen, // 12 - One more than the previous one King, // 13 - One more than the previous one Ace, // 14 - One more than the previous one NumberOfFaceCards = 4, // 4 - Explicitly set SomeOtherValue, // 5 - One more than the previous one HighestFaceCard = Ace // 14 - Ace is defined above }
Default रूप से enum की Values को Hold करने के लिए System.Int32 Type का प्रयोग होता है। लेकिन हम हमारी जरूरत व सुविधानुसार किसी भी Numerical Type जैसे byte, short, int या long में से किसी भी Type की Value को enum Values की तरह Use कर सकते हैं। जैसे:
enum DayNames : byte { . . . }
जब एक बार हम किसी enum Type की Storage व Range Specify कर लेते है, यानी जब एक बार हम enum Type Create कर लेते हैं, तो फिर हम उस enum Type के जितने चाहें उतने Instances Create कर सकते हैं, उसे किसी Method में Parameter की तरह Pass कर सकते हैं अथवा किसी Method से Return Value की तरह Return करवा सकते हैं। उसे किसी Local Variable को Assign कर सकते हैं या किसी Class के Field को Assign करने के लिए Use कर सकते हैं।
यानी जब एक बार हम enum Type Create कर लेते हैं, तो उस enum Type को हम हर उस जगह पर Use कर सकते हैं, जिस जगह पर हम किसी User Defined Type को अथवा Predefined Type को Use करते हैं।
चूंकि enum Type वास्तव में Fixed Name/Value Pairs का समूह मात्र होता है, इसलिए हम कभी भी किसी enum Type के Object को नई Value से Set नहीं कर सकते। साथ ही हमें हमेंशा किसी भी enum Value के Object के मान को Access करने के लिए हमेंशा Object के नाम के साथ Dot Operator का प्रयोग करते हुए enum Value को Specify करना होता है, जैसाकि पिछले उदाहरणों में किया है।
Enum in C# – System.Enum Type
हम .NET में जो भी enum Type Create करते हैं, वह Type हमेंशा .NET Framework के System.Enum Class से Inherit होता है। इसलिए System.Enum नाम की Class की विभिन्न Functionalities हमें हमारे Newly Created enum Type में प्राप्त होती हैं। इस Class में बहुत सारे Methods Define किए गए हैं, जिनकी Detailed Information हम Visual Studio के Object Browser Option द्वारा प्राप्त कर सकते हैं।
फिर भी कुछ Special Methods हैं, जिनका प्रयोग करके हम Newly Created enum Type से सम्बंधित महत्वपूर्ण जानकारियां प्राप्त कर सकते हैं। उदाहरण के लिए System.Enum Class से हमें Enum.GetUnderlyingType() नाम का एक Static Method प्राप्त होता है, जिसका प्रयोग करके हम हमारे enum Type के विभिन्न Values द्वारा Use किए जा रहे Type का पता लगा सकते हैं। जैसे:
// File Name: EnumGetUnderlyingType.cs using System; namespace CSharpIntermediateConstructsEnum { enum MonthName { Jan = 1, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec } class EnumGetUnderlyingType { static void Main(string[] args) { MonthName thisMonth = MonthName.Jan; Console.WriteLine("Enum Type: {0}", Enum.GetUnderlyingType(thisMonth.GetType())); } } } // Output: Enum Type: System.Int32
चूंकि Enum.GetUnderlyingType() Method में Parameter के रूप में हमें Enum Type के Object का Type Specify करना होता है। इसीलिए हमने इस Method में thisMonth.GetType() Parameter Specify किया है, जो कि thisMonth Enum Type के Object का Type Return करता है।
इसी तरह से हम GetNames() नाम के Static Method का प्रयोग करके किसी enum Type के सभी Values का नाम एक Array के रूप में Return कर सकते हैं। जैसे:
// File Name: ArrayOfEnumNames.cs using System; namespace CSharpIntermediateConstructsEnum { enum MonthName { Jan = 1, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec } class ArrayOfEnumNames { static void Main(string[] args) { MonthName thisMonth = MonthName.Jan; string[] months = Enum.GetNames(thisMonth.GetType()); foreach (string month in months) Console.Write("{0}\t", month); } } } // Output: Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
ये Article इस वेबसाईट पर Selling हेतु उपलब्ध EBook C#.NET in Hindi से लिया गया है। इसलिए यदि ये Article आपके लिए उपयोगी रहा, तो निश्चित रूप से ये पुस्तक भी आपके लिए काफी उपयोगी साबित होगी।
C#.NET in Hindi | Page:908 | Format: PDF