我有一个类HierarchicalDictionary和一些派生类,例如区域、部门等,我希望控制从HierarchicalDictionary派生的所有类包含该类(区域、部门等)类型的属性“层次结构”。在建造过程中。如果不是这样的话,我希望建造失败。
也就是说,如果区域不包含类型区域的属性层次结构,或者部门不包含类型Department的属性层次结构,则生成应该失败。
因此,我希望在编译条件下这样检查(伪代码):
foreach (Class1 that derive from HierarchicalDictionary)
if(!(Class1 contains property Hierarchy of type Class1))
build fail
我考虑过CodeContracts,但我不知道在构建过程中是否有可用的条件失败。也许有什么合适的方法?
UPD:我将尝试描述我的情况的其他限制:
HierarchicalDictionary没有存储(在数据库中)类。并且存储派生类,因此相应的表在数据库中包含自引用字段。当我从C1派生“HierarchicalDictionary”类时,我的意思是这个类必须包含"C1“类型的属性(或字段)”层次结构“。比如ClassMustContainHierarchyFieldOfMyselfType属性。我想在编辑过程中控制这个事实。如果我的类" C2“是从HierarchicalDictionary派生的,并且不包含字段(或属性)”公共C2等级“,那么构建就会失败。
也许没有任何“内置”的解决方案。也许我可以使用构建前后的事件或其他任何东西(比如CodeContracts )?
发布于 2012-09-03 04:08:32
如果HierarchicalDictionary
可以是abstract
,则可以在基类中将属性定义为abstract
。这在每个子类中强制执行一个具体的实现。
如果需要创建基类HierarchicalDictionary
的实例,则可以通过添加接口强制执行该属性。
发布于 2012-09-03 04:35:58
好吧,也许你可以这样做:
// 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
因此,您可以使用抽象方法创建约束,加上每个overriden方法都返回自己的类型,因为它们是从泛型基类派生的。
https://stackoverflow.com/questions/12247563
复制