c# - 每个继承的类的C#静态实例成员

标签 c# inheritance static

考虑以下示例:

interface IPropertyCollection
{
    public MethodWrapper GetPropertySetterByName(string name);
    //<<-- I want the implementation from A and B merged into here somehow
}
class A : IPropertyCollection
{
    static PropertyMap properties = new PropertyMap(typeof(A));
    public MethodWrapper GetPropertySetterByName(string name)
    {
        return properties.SomeFunc(name);
    }
}
class B : IPropertyCollection
{
    static PropertyMap properties = new PropertyMap(typeof(B));
    public MethodWrapper GetPropertySetterByName(string name)
    {
        return properties.SomeFunc(name);
    }
}


我希望每个类中都有一个静态成员,仅跟踪该类中的内容,并且我希望每个类的行为完全相同,但内容不同。每个静态成员只应跟踪一个类。我希望仅通过具有任何IPropertyCollection的实例就可以访问类的静态成员。

像这样:

    IPropertyCollection a = new A();
    IPropertyCollection b = new B();
    a.GetPropertySetterByName("asdfsj");  //Should end up in static A.properties 
    b.GetPropertySetterByName("asdfsj");  //Should end up in static B.properties 


现在这将适用于我的示例代码,但是我不想在A和B以及其他50个类中重复所有这些行。

最佳答案

使用(奇怪地重复出现)的通用通用基类:

abstract class Base<T> : IPropertyCollection where T : Base<T> {
  static PropertyMap properties = new PropertyMap(typeof(T));
  public MethodWrapper GetPropertySetterByName(string name) {
      return properties.SomeFunc(name);
  }
}

class A : Base<A> { }
class B : Base<B> { }


由于基类是泛型的,因此将为每个不同的类型参数“生成”其静态成员的不同“版本”。

请小心evil dogs :-)

class Evil : Base<A> { } // will share A's static member...

关于c# - 每个继承的类的C#静态实例成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8142768/

相关文章:

c++ - 静态变量的地址值可以与堆分配地址匹配吗?

c# - 非常简单的委托(delegate)沉思

c# - 无法将字符串数组正确转换为 double 组,返回 0

c# - 重新学习 C#

c++ - 为什么从具体类派生是一个糟糕的设计

c++ - 用静态成员函数替换静态常量成员的优点

c# - 从控制台应用程序异步调用 Azure 移动服务

inheritance - TypeScript:应该推断继承方法中的参数类型

c++ - 将指向 union 体的指针强制转换为未知事件成员的已知基类

java - 为什么在空引用上调用(静态)方法不会抛出 NullPointerException?