考虑以下示例:
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);
}
}
我希望每个类中都有一个静态成员来跟踪该类中的事物,我希望它对每个类的行为完全相同,但内容不同。每个静态成员应该只跟踪一个单独的类。我希望能够访问课程&#39;只有一个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个类中的所有这些行。
答案 0 :(得分:6)
使用(奇怪的重复)通用公共基类:
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...
答案 1 :(得分:4)
Static members无法继承。他们属于他们宣布的阶级。