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();
}
}
답변
답변
또 다른 옵션은 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를 사용하십시오.