私が書いているプログラムに問題があり、仮想関数が本来の動作をしていないようです。
仮想関数を持つクラスと、それをオーバーライドする派生クラスがあります。関数を呼び出すと、オーバーライドは呼び出されませんが、ベースは呼び出されます。これは私が以前に何百万回も行ったことであり、単純なケースなどでその動作がどのように壊れるかわかりません。
例として:
public class ClassA
{
public DoStuff()
{
MyVirtual()
}
protected virtual MyVirtual()
{
Console.WriteLine("Base MyVirtual Called");
}
}
public class ClassB : ClassA
{
protected override MyVirtual()
{
Console.WriteLine("Overridden MyVirtual Called");
}
}
ClassA test = new ClassB;
test.DoStuff();
この例は、効果のためだけのものです (チェックするためにコンパイルしていません。デモンストレーションを行っているだけです)。オーバーライドが呼び出されないように、何がそれを壊すのか知りたいだけです。特定のコードを貼り付けることはできませんが、理論的にはそれと同じくらい簡単です。
- 継承階層は 2 つのクラスだけです
- 封印された修飾子はありません
- クラスは、継承されたクラスの new への単純な呼び出しによって作成されます
- 仮想関数は保護され、そのように基本クラスのパブリック関数から呼び出されます
それがどのように壊れる可能性がありますか、または何がその動作を妨げる可能性がありますか? プロジェクトは非常に複雑ですが、これは私が実装していることは新しいことではありません。私の特定のコードには、まったく同じ方法で記述され、同じ方法で継承された別の仮想関数もあり、正常に動作します。その関数をコピーして貼り付けて名前を変更することで新しい関数を作成したので、構文は同じである必要があります(機能しないときに最初から再構築しましたが、動作に違いはありません)。
とにかく、私は機知に富んでいて、これのあいまいな理由を探すのに何日も費やすことはできないので、どこから探し始めるかについてのアイデアは非常に高く評価されます.