문제

나는 당신이 열렬한 상속을 사용할 수 없다는 것을 알고 있으므로, 기본 클래스에서는 그것을 구현하는 클래스가 속성에 대한 일부 유형의 열거를 반환해야한다고 정의하고 싶습니다.

이상적으로는 다음과 같습니다.

public abstract BaseEnum MyEnum { get; set; }

그러면 모든 구현자는 어떤 형태의 열거 형을 반환해야합니다. 그러나 분명히 Baseenum은 존재하지 않습니다. 나는 물체를 사용할 수 있지만 오히려 나는 그렇지 않습니다.

이것을하는 좋은 방법이 있습니까?

편집하다: 나는 본질적으로 구현 클래스의 속성 이름을 동일하게 유지하고 싶기 때문에 이것을 묻는다 - 나는 기본 클래스에서 열거와 함께 일할 수 없지만 그것을 넣지 않았다면 나는 그것을 넣지 않았다는 것을 알고있다. 기지에서 구현 클래스는 열거에 대한 자체 속성 이름을 결정할 수 있으며, 이는 자신의 구현으로 표류 할 때 시간이 지남에 따라 불분명해질 수 있습니다.

도움이 되었습니까?

해결책

C#에서 쉽게 올 수있는 가장 가까운 것은 구조물 제약 조건으로 일반적인 유형을 만드는 것입니다.

public abstract class BaseClass<T> where T : struct
{
    public abstract T MyEnum { get; set; }
}

그 다음에

public class DerivedClass : BaseClass<SomeEnum>

C#을 사용하면 CLI가 지원하더라도 열거 형식으로 제한하는 제한 조건을 지정할 수 없습니다. 나는 불리는 프로젝트가 있습니다 제한되지 않은 멜로디 건축 후 트릭을 사용하여 그러한 제약을 시행하지만 다소 대담하다고 느끼지 않는 한 동일한 접근 방식을 취하는 것이 좋습니다. 구조물 제약 조건은 최소한 가치 유형으로 제한 할 수 있습니다. 이는 충분할 수 있습니다.

다른 팁

모든 열거는 System.enum에서 상속됩니다.

여기서 살펴 봐야합니다. 열거적인 "상속":

See section 8.5.2 of the CLI spec for the full details.
Relevant information from the spec

 * All enums must derive from System.Enum
 * Because of the above, all enums are value types and hence sealed
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top