[C#] C #의 열거 형 내부 메서드

Java에서는 열거 형 안에 메소드를 가질 수 있습니다.

C #에 그러한 가능성이 있습니까? 아니면 문자열 모음입니까?

재정의를 시도했지만 ToString()컴파일되지 않습니다. 누군가 간단한 코드 샘플을 가지고 있습니까?



답변

열거 형 유형에 대한 확장 메소드 를 작성할 수 있습니다 .

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 # 프로그래밍 가이드)


답변

또 다른 옵션은 Jimmy Bogard가 만든 Enumeration Class 를 사용하는 것 입니다.

기본적으로로부터 상속되는 클래스를 만들어야합니다 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) 보다 기본적으로 enum을 더 잘 구현하는 언어와 매우 유사합니다 .


답변

아니. 그런 다음에 클래스에 속성의 무리를 추가하는 클래스를 만들 수 있습니다 다소 열거을 모방하지만, 그게 정말 같은 일 .

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);
    }
}

이것은 대소 문자를 무시하고 더 많은 유형 안전을 얻기 위해 열거 형으로 REST- 응답을 구문 분석하는 데 매우 편리합니다. 잘만되면 그것은 누군가를 돕는다


답변

C # 클래스 기반 원칙이 아니라 문자열과 값이있는 2 차원 배열이므로 열거 자에서 메서드를 사용할 수 없습니다.

이 경우 클래스 사용은 Microsoft에서 권장하지 않습니다. 대신 (data) struct (ures)를 사용하십시오. STRUCT는 데이터 및 처리기의 경량 클래스로 설계되었으며 함수를 잘 처리 할 수 ​​있습니다. C #과 컴파일러에는 JAVA에서 알 수 있듯이 추적 및 효율성 기능이 없습니다. 여기서 특정 클래스 / 메소드를 더 많이 사용하면 실행 속도가 빨라지고 사용이 ‘예상됩니다’. C #에는 단순히 그 기능이 없으므로 구분하기 위해 CLASS 대신 STRUCT를 사용하십시오.


답변