JetBrains Rider 2024.1 ヘルプ

コード検査: コンストラクター内の仮想メンバーコール

Eric Lippert がこの投稿で説明しているように、基本型初期化子は派生型初期化子の後に実行されますが、コンストラクターは逆の順序で実行されます。つまり、派生型のコンストラクターは基本型のコンストラクターの後に呼び出されます。一方、仮想メソッドの呼び出しは、常に最も派生した型で実行されます。

つまり、基本型のコンストラクターから仮想メンバーを呼び出す場合、派生型のコンストラクターが呼び出されるに、派生型のこの仮想メンバーのオーバーライドがそれぞれ実行されます。

想像しているように、派生型のオーバーライドでメンバーが使用されていると、混乱とエラーが発生する可能性があります。

コンストラクター内の仮想呼び出しは、派生型が基本型の何らかの側面を設定できるようにすることを目的としていることがよくあります。このような仮想メソッドは、実際には、ある値を返し、派生した型の状態に依存しない純粋な関数でなければなりません。これが当てはまる場合は、そのような関数を静的にして(純粋なので)、その戻り値を protected コンストラクターのパラメーターとして基本型に渡します。