静的継承は、インスタンス継承と同じように機能します。静的メソッドを仮想または抽象的にすることは許されません。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
継承をルックアップと名前の隠蔽と混同しています。 –
[C#で抽象静的メソッドを使用できないのはなぜですか?](https://stackoverflow.com/questions/3284/why-cant-i-have-abstract-static-methods-in-c) –