C#从泛型类中读取属性而无需实例

时间:2018-12-16 17:58:17

标签: c# generics static attributes

问题描述

我正在尝试实现一种我可能无法直接实例化的对象的非常特殊的缓存(例如,私有构造函数)

我想做的是阅读有关特定类的一些信息,最好是通过某种类型的接口(遗憾的是它不支持为每个子类定义的静态方法)

换句话说:

public class Data
{
     public static bool Attribute1() => False;
     private Data(...) { ... }
}

public class Cache<T> // T is for instance Data
{
     void SomeMethod() 
     {
          bool Value = T.Attribute1()
          ...
     }
}

如果我可以使T从某个基类或某个接口继承,并通过某种方法或直接获取该属性,那是很好的。尽管我可以

  • 编写多个数据类A和B,其中A.Attribute1()与B.Attribute1()不同
  • 从数据类类型获取属性,而无需实例化数据类型

当前解决方案

我目前确实有一个解决方案,它是在初始化静态对象时构建的注册表形式,例如:

class CacheAttributesRegistry
{
    static RegisterAttributes(Type T, bool Attribute1, ...) { ... }
}  

class Data 
{
    static Data() { RegisterAttributes(typeof(Data), true, ...); }
}

class Cache<T>
{
    void SomeMethod()
    {
        bool Value = CacheAttributesRegistry.Attribute1(typeof(T));
    }
}

它确实满足我的要求,但我更希望避免在每个数据类中使用静态构造函数,而且我也不希望在运行时意外调用RegisterAttributes

最好也避免反射,因为我希望它很明显如何在没有代码在后台魔术地推断出类的情况下为类设置属性。

我错过了一些选择还是我刚刚达到一些语言限制?

0 个答案:

没有答案