是否有c#enum的基础对象?

时间:2010-01-14 08:49:26

标签: c# inheritance enums base-class

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

理想情况下,这就像:

public abstract BaseEnum MyEnum { get; set; }

然后所有实施者都必须返回某种形式的枚举。但显然BaseEnum不存在。我可以使用对象,但我宁愿不使用。

这样做有什么好办法吗?

编辑:我问这个是因为我基本上想要保持实现类中属性的名称相同 - 我知道我将无法使用枚举基类,但是如果我没有把它放在基类中,那么实现类可以为它们的枚举决定它们自己的属性名,随着时间的推移可能会变得不清楚,因为它们会偏向于它们自己的实现。

3 个答案:

答案 0 :(得分:3)

所有枚举都从System.Enum继承。

答案 1 :(得分:2)

C#中最接近的是使用结构约束使类型通用:

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

然后

public class DerivedClass : BaseClass<SomeEnum>

C#不允许您指定限制枚举类型的约束,即使CLI确实支持它。我有一个名为Unconstrained Melody的项目,它使用构建后的技巧来强制执行这样的约束 - 但我不建议你采取相同的方法,除非你感觉有点大胆。结构约束至少会限制你的值类型,这可能已经足够了。

答案 2 :(得分:1)

你应该看看这里:Enum “Inheritance”

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