我知道你不能使用继承与枚举,所以在我的基类我想定义一个实现它的类必须返回某种类型的枚举的属性。

理想情况下,这将是这样的:

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