2011-07-17 3 views
0

기본 클래스에서 enum 값의 할당을 처리하려고합니다. 서브 클래스가 열거 형에서 값이 올지를 결정할 때 어떤 유형의 기본 필드가 기본 클래스에 있어야하는지 잘 모르겠습니다.다른 열거 형에서 enum 값을 보유하는 필드

아래 기본 클래스에서 object을 사용했습니다. 대신 올바른 기본 유형을 찾고 있습니다. 나는 Enum을 시도했지만 Intellisense가 생성자에 대해 불평하지 않는 동안 많은 다른 코드에 문제가 있습니다. 당신이 정말로 제네릭 원하는처럼

public enum A { One, Two, Three } 
public enum B { Four, Five, Six } 

public abstract class FooBase 
{ 
    object _enumVal; 

    protected FooBase(object enumVal) 
    { 
     _enumVal = enumVal; 
    } 
} 

public class Bar : FooBase 
{ 
    public Bar(A enumVal):base(enumVal) {} 
} 

public class Bat : FooBase 
{ 
    public Bat(B enumVal):base(enumVal) {} 
}

답변

2

그것은 소리 : 당신은 정상적인 C#을 내 열거이어야 등 T하는 일반적인 제약 조건을 지정할 수 없습니다

public enum A { One, Two, Three } 
public enum B { Four, Five, Six } 

public abstract class FooBase<T> where T : struct 
{ 
    T _enumVal; 

    protected FooBase(T enumVal) 
    { 
     _enumVal = enumVal; 
    } 
} 

public class Bar : FooBase<A> 
{ 
    public Bar(A enumVal):base(enumVal) {} 
} 

public class Bat : FooBase<B> 
{ 
    public Bat(B enumVal):base(enumVal) {} 
} 

을,하지만 당신은 do perverse things to the generated code to express that constraint in IL을 할 수 있습니다.

관련 문제