在基本静态方法中获取派生类属性 - RIDDLE! :)

时间:2011-05-15 08:55:46

标签: c# reflection static properties derived-class

我想详细说明我正在进行的当前项目,但这将是很长的。相反,我只会发布一个编程谜语,基本上解释了我想要完成的事情。 :)

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()
    {
        //...???...
    }
}

这个谜语是如何创建一个抽象基类,它将保存所有派生类属性的静态缓存?

请注意,我们的想法是避免按名称加载程序集。

2 个答案:

答案 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的类型的所有程序集。