【发布时间】:2017-08-20 08:39:29
【问题描述】:
我有一个类 Foo,它是许多其他类(如 Bar 和 Baz)的基类,我想使用 Bar 和 Baz 中的静态成员在 Foo 中进行一些计算,如下所示:
public class Foo{
public result1 {
get{
return field1;
}
}
}
public class Bar : Foo{
public const int field1 = 5;
}
public class Baz : Foo{
public const int field1 = 10;
}
我能想到的唯一解决方案是将所有字段包装在一个容器中,为每个对象添加一个额外的标识符,并使用函数返回字段,就像这样
Bar : Foo{
public readonly int id = 0;
public static Wrapper wrapper;
}
public Wrapper GetWrapper(int id){
switch(id){
case 0:
return Bar.wrapper;
}
}
但是,如您所见,我需要维护一个额外的类和函数,并且我不想让我的代码碎片化。有没有其他选择?
【问题讨论】:
-
您可以添加一个虚拟(或更好的抽象)函数而不是静态成员,它将返回子类中的值...
-
是的,没有办法绕过像虚拟成员(getter/get 方法)这样的东西——类型系统不允许你正在寻找的这种静态继承
-
静态和继承不能很好地结合在一起。如果你试图让他们一起玩,你最终会导致两者中的一个打败另一个。
标签: c# inheritance static-members