40

派生クラスで基本クラスのコンストラクターをオーバーライドすることは可能ですか?

もしそうなら、どのようにそれを達成することができますか?また、どのようなユースケースでこれが実用的でしょうか? そうでない場合、なぜですか?

4

3 に答える 3

54

いいえ、コンストラクターをオーバーライドすることはできません。コンストラクターは多態的に呼び出されないため、この概念は C# では意味がありません。構築しようとしているクラスと、コンストラクターへの引数を常に述べます。

コンストラクターはまったく継承されませんが、派生クラスのすべてのコンストラクターは、同じクラス内の別のコンストラクター、または基本クラス内のコンストラクターの 1 つにチェーンする必要があります。これを明示的に行わないと、コンパイラは基本クラスのパラメーターなしのコンストラクターに暗黙的にチェーンします (そのコンストラクターが存在しないかアクセスできない場合はエラーが発生します)。

于 2012-06-30T06:15:38.710 に答える
16

いいえ、コンストラクターは継承されません。派生クラスでそれらをオーバーライドすることはできません。
理由

object から派生するすべてのクラスに対して、基本コンストラクターが常に呼び出されます。これは、すべてのクラスが base() コンストラクターを (明示的または暗黙的に) 呼び出す少なくとも 1 つのコンストラクターを持っている必要があり、this() コンストラクターへのすべての呼び出しが最終的に a を呼び出す必要があるためです。 base() コンストラクター。

于 2012-06-30T06:19:47.150 に答える
8

いいえ、コンストラクターをオーバーライドすることはできません。

コンストラクターの基本的な構文を見ると、コンストラクターを作成するクラスと同じ名前にする必要があります。

たとえば、基本クラスと同じ名前 (基本クラス コンストラクターと同じ) のメソッドを作成すると、戻り値の型が指定されていない派生クラスの新しいメソッドになり、構文的に正しくありません。

于 2012-06-30T06:23:46.730 に答える