在.net中强制继承

时间:2010-11-24 06:40:30

标签: .net inheritance

是否可以在.net中强制执行继承?

例如,我有一个类库项目,其中包含一个基类“BaseEntity”。我有3个类说“EntityA”,“EntityB”和“EntityC”,所有这些类都继承自这个基类。现在,当我在这个项目中创建另一个类时,.net应该给我一个编译时错误,该类不会从类“BaseEntity”继承。

2 个答案:

答案 0 :(得分:7)

您不能强制C#编译器使项目中的每个类继承自特定的其他类,否。你也不应该。如果要创建一些辅助类或其他非实体类,该怎么办?为什么项目中所有都是实体?

现在,可以强制继承的两种方式:

  • 您可以使BaseEntity成为一个抽象类,这样每当您处理BaseEntity的实例时,您实际上都在处理某个派生类的实例。
  • 您可以使用带有约束的类型参数编写泛型类型或方法,以使类型参数必须为BaseEntity或派生类:

    public void EntityLoader<T> where T : BaseEntity
    

这些都不是你所要求的,但它们是可用的。

答案 1 :(得分:1)

如果你真的想这样做(我认为Jon Skeet说他不应该这样做),你可以编写一个帮助命令行实用程序来加载特定的程序集,使用反射来测试你的继承规则。要获得编译时错误,请在项目的postbuild事件中调用此程序。