回答:
列挙型の拡張メソッドを作成できます。
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();
}
}
列挙型の拡張メソッドを作成できます。
別のオプションは、Jimmy Bogardによって作成された列挙クラスを使用することです。
基本的に、彼から継承するクラスを作成する必要があります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#よりもネイティブで列挙型を実装する言語(Kotlinなど)にかなり近いです。
いいえ。クラスを作成してから、クラスに一連のプロパティを追加して、列挙型をいくらかエミュレートできますが、実際には同じことではありません。
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.
}
}
より良いパターンは、あなたのメソッドをあなたのエミュとは別のクラスに置くことです。
C#は、クラスベースの原則ではなく、文字列と値を持つ2次元配列であるため、列挙子でのメソッドの使用を許可しません。
この場合、Microsoftはクラスの使用をお勧めしません。代わりに(data)struct(ures)を使用してください。STRUCTは、データとそのハンドラーのライトクラスとして意図されており、関数を適切に処理できます。Javaからわかるように、C#とそのコンパイラーには追跡機能と効率機能がありません。特定のクラス/メソッドが使用される回数が多いほど、実行が速くなり、その使用が「期待」されます。C#にはそれがないので、区別するには、CLASSではなくSTRUCTを使用します。