【发布时间】:2009-04-18 12:16:37
【问题描述】:
静态继承就像实例继承一样工作。除非您不允许将静态方法设为虚拟或抽象。
class Program {
static void Main(string[] args) {
TestBase.TargetMethod();
TestChild.TargetMethod();
TestBase.Operation();
TestChild.Operation();
}
}
class TestBase {
public static void TargetMethod() {
Console.WriteLine("Base class");
}
public static void Operation() {
TargetMethod();
}
}
class TestChild : TestBase {
public static new void TargetMethod() {
Console.WriteLine("Child class");
}
}
这将输出:
Base class
Child class
Base class
Base class
但我想要:
Base class
Child class
Base class
Child class
如果我可以使用静态方法,我会将 TargetMethod 设为虚拟并且它会完成这项工作。但是有什么办法可以达到同样的效果吗?
编辑:是的,我可以将 Operation 的副本放在子类中,但这需要将大量代码复制并粘贴到每个子类中,在我的例子中是大约 35 个类,这是维护的噩梦。
【问题讨论】:
-
你为什么使用静态函数?
-
您将继承与查找和名称隐藏混淆了。
标签: c# inheritance