靜態繼承與實例繼承一樣工作。除非您不允許使靜態方法變爲虛擬或抽象。C#虛擬(或抽象)靜態方法
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虛擬,它會做的工作。但是有沒有一種解決方法來獲得相同的效果?
編輯:是的,我可以在子類中放置一個操作副本,但是這需要將大量代碼複製並粘貼到每個孩子身上,在我的情況下,這是大約35個班級的維護噩夢。
爲什麼使用靜態函數? – munificent 2009-04-18 12:41:23