我想详细说明我正在进行的当前项目,但这将是很长的。相反,我只会发布一个编程谜语,基本上解释了我想要完成的事情。 :)
abstract class A
{
// key = Derived Class name, value = list of properties the derive class exposes.
private static Dictionary<string, List<string>> _DerivedPropertyNames;
static A()
{
InitializeDerivedPropertyNames();
}
private static void InitializeDerivedPropertyNames()
{
//...???...
}
}
这个谜语是如何创建一个抽象基类,它将保存所有派生类属性的静态缓存?
请注意,我们的想法是避免按名称加载程序集。
答案 0 :(得分:1)
在基类中没有简单(有效)的方法 只需在每个派生类中实现一个静态构造函数,并使用它来注册属性。
另外,请查看WPF Fx中的依赖项属性,以进行比较。
答案 1 :(得分:0)
如果您可以等待实例化子类型的实例,那么您可以使用A的常规构造函数来注册实现类:
public A()
{
Type childType = GetType();
string className = childType.Name;
if (!_DerivedPropertyNames.ContainsKey(className)) {
// add properties for this class
}
}
在任何实例化之前,如果没有在子类中添加逻辑(我想你不想要),你很难在静态构造函数中完成工作。原因是当调用A的静态构造函数时,您将无法强制执行包含实现A的类型的所有程序集。