2

我有一个 HierarchicalDictionary 类和一些派生类,例如 Territory、Department 等。我想控制从 HierarchicalDictionary 派生的所有类在构建期间包含该类(Territory、Department 等)类型的属性“层次结构” . 如果不是这样,我希望构建失败。

也就是说,如果 Territory 不包含 Territory 类型的属性 Hierarchy 或 Department 不包含 Department 类型的属性 Hierarchy,则构建应该会失败。

所以我希望在编译条件期间像这样检查(伪代码):

foreach (Class1 that derive from HierarchicalDictionary)
  if(!(Class1 contains property Hierarchy of type Class1))
    build fail

我考虑过CodeContracts,但我不知道在构建期间是否存在因条件而失败的可用性。可能有一些适当的方法吗?

UPD:我将尝试描述针对我的情况的其他限制:

HierarchicalDictionary 不存储(在数据库中)类。并存储派生类,因此相应的表包含数据库中的自引用字段。当我从 HierarchicalDictionary 派生类“C1”时,我的意思是,这个类必须包含“C1”类型的属性(或字段)“层次结构”。像 [ClassMustContainHierarchyFieldOfMyselfType] 属性。我想在编译期间控制这个事实。如果我有从 HierarchicalDictionary 派生的类“C2”并且不包含字段(或属性)“public C2 Hierarcy”,则构建应该失败。

可能没有任何“内置”解决方案。可能我可以使用构建前或构建后事件或其他任何东西(例如 CodeContracts)?

4

2 回答 2

4

如果HierarchicalDictionary可以abstract,您可以将属性定义为abstract在基类中。这在每个子类中强制执行具体实现。

如果您需要能够创建基类的实例,HierarchicalDictionary您可以通过添加接口来强制执行该属性。

于 2012-09-03T12:08:32.913 回答
1

好吧,也许你可以做这样的事情:

// GENERIC base class 
public abstract class A<T> 
{
    public abstract T GetMyType {get;}  
}

//derived ones 
public class B : A<B>
{
   public override B GetMyType
   {     
      get {
        return new B();     
      }
   }
}


public class C : A<C>
{
   public override C GetMyType 
   {     
      get  {
         return new C();        
      }
   }
}

在代码之后:

new B().GetMyType.ToString(); //B 
new C().GetMyType.ToString(); //C

因此,您使用抽象方法创建约束,而且每个被覆盖的方法都返回自己的类型,因为它们是从泛型基类派生的。

于 2012-09-03T12:35:58.773 回答