जावा में, किसी एनम के अंदर तरीके होना संभव है।
क्या C # में ऐसी संभावना है या यह सिर्फ एक स्ट्रिंग संग्रह है और यह है?
मैंने ओवरराइड करने की कोशिश की ToString()
लेकिन यह संकलन नहीं है। क्या किसी के पास एक सरल कोड नमूना है?
जावा में, किसी एनम के अंदर तरीके होना संभव है।
क्या C # में ऐसी संभावना है या यह सिर्फ एक स्ट्रिंग संग्रह है और यह है?
मैंने ओवरराइड करने की कोशिश की ToString()
लेकिन यह संकलन नहीं है। क्या किसी के पास एक सरल कोड नमूना है?
जवाबों:
आप enum प्रकारों के लिए विस्तार विधियाँ लिख सकते हैं:
enum Stuff
{
Thing1,
Thing2
}
static class StuffMethods
{
public static String GetString(this Stuff s1)
{
switch (s1)
{
case Stuff.Thing1:
return "Yeah!";
case Stuff.Thing2:
return "Okay!";
default:
return "What?!";
}
}
}
class Program
{
static void Main(string[] args)
{
Stuff thing = Stuff.Thing1;
String str = thing.GetString();
}
}
आप अपने एनम के लिए एक विस्तार विधि लिख सकते हैं:
कैसे करें: एन्यूमरेशन के लिए एक नया तरीका बनाएं (C # प्रोग्रामिंग गाइड)
एक अन्य विकल्प जिमी बोगार्ड द्वारा निर्मित एन्यूमरेशन क्लास का उपयोग करना है ।
मूल रूप से, आपको एक ऐसा वर्ग बनाना होगा जो उससे विरासत में मिला हो Enumeration
। उदाहरण:
public class EmployeeType : Enumeration
{
public static readonly EmployeeType Manager
= new EmployeeType(0, "Manager");
public static readonly EmployeeType Servant
= new EmployeeType(1, "Servant");
public static readonly EmployeeType Assistant
= new EmployeeType(2, "Assistant to the Regional Manager");
private EmployeeType() { }
private EmployeeType(int value, string displayName) : base(value, displayName) { }
// Your method...
public override string ToString()
{
return $"{value} - {displayName}!";
}
}
फिर आप इसे एक एनुम की तरह उपयोग कर सकते हैं, इसके अंदर तरीकों को डालने की संभावना के साथ (अन्य चीजों के बीच):
EmployeeType.Manager.ToString();
//0 - Manager
EmployeeType.Servant.ToString();
//1 - Servant
EmployeeType.Assistant.ToString();
//2 - Assistant to the Regional Manager
आप इसे NuGet के साथ डाउनलोड कर सकते हैं ।
यद्यपि यह कार्यान्वयन भाषा में मूल नहीं है, वाक्यविन्यास (निर्माण और उपयोग) उन भाषाओं के बहुत करीब है जो एनमों को मूल रूप से C # से बेहतर लागू करते हैं ( उदाहरण के लिए कोटलिन )।
नहीं। तुम्हें पता है, एक वर्ग बना सकते हैं तो वर्ग के लिए गुण का एक समूह जोड़ने के लिए कुछ हद तक एक enum का अनुकरण है, लेकिन thats वास्तव में नहीं एक ही बात ।
class MyClass
{
public string MyString1 { get{ return "one";} }
public string MyString2 { get{ return "two";} }
public string MyString3 { get{ return "three";} }
public void MyMethod()
{
// do something.
}
}
एक बेहतर पैटर्न यह होगा कि आप अपने तरीके को अपनी इमाम से अलग कक्षा में रखें।
जब से मैं आया था, और स्ट्रिंग के लिए एनम के सटीक विपरीत की आवश्यकता थी, यहाँ एक सामान्य समाधान है:
static class EnumExtensions {
public static T GetEnum<T>(this string itemName) {
return (T) Enum.Parse(typeof(T), itemName, true);
}
}
यह मामले को भी नजरअंदाज करता है और अधिक प्रकार की सुरक्षा प्राप्त करने के लिए आपके एनम के लिए रेस्ट-रिस्पांस को पार्स करने के लिए बहुत आसान है। उम्मीद है कि यह किसी की मदद करता है
सी # एन्यूमरेटरों में विधियों के उपयोग की अनुमति नहीं देता है क्योंकि यह एक वर्ग आधारित सिद्धांत नहीं है, बल्कि एक स्ट्रिंग और मूल्य के साथ 2 आयामी सरणी है।
Microsoft द्वारा इस मामले में कक्षाओं का उपयोग अत्यधिक हतोत्साहित किया जाता है, इसके बजाय (डेटा) संरचना (ures) का उपयोग करें; STRUCT का उद्देश्य डेटा और उसके हैंडलर्स के लिए एक हल्के वर्ग के रूप में है और यह ठीक काम कर सकता है। C # और इसके कंपाइलर में JAVA से पता चलता है कि ट्रैकिंग और दक्षता की क्षमता नहीं है, जहाँ जितनी बार एक निश्चित वर्ग / विधि का उपयोग किया जाता है उतनी तेज़ी से चलता है और इसका उपयोग 'प्रत्याशित' हो जाता है। C # के पास ऐसा नहीं है, इसलिए अंतर करने के लिए CLASS के बजाय STRUCT का उपयोग करें।