私はちょうど簡単な質問をしたかった - 私は次のようにTLabelから派生したクラスを持っている:今、Delphiは私がオーバーライドととせずに両方のバージョンをコンパイルすることができますオーバーライドと非上書きコンストラクタ
TMyLabel = class (TLabel)
...
constructor Create(AOwner: TComponent); override;
end;
constructor TMyLabel.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
{ some code }
end;
を。違いが何であるか説明できますか? がに上書きされたときにCreate()
に自分のパラメータを要求できないこと以外ありがとう
編集:私が言っているのは、virtual
と非仮想ベースの子孫コンストラクタの違いは何ですか?私は常に継承されたコンストラクタをinherited Create()
で呼び出すことができるので、何がポイントですか?
[派生クラスでコンストラクタ宣言の後にオーバーロードまたはオーバーライドする必要がありますか?](http://stackoverflow.com/questions/360597/need-i-put-overload-or-override)コンストラクタ宣言の後の言葉) –
コンパイラは、そうしないと警告を出しますが、そうですか?リンクされた複製から"そうしないと、TMinMatrixのコンストラクタがTMatrixのコンストラクタを「隠している」とコンパイラが警告するでしょう。 - コンポーネントコンストラクタを非表示にするための実用的なNEEDはまだありません。特に、TCOmponentはコンストラクタとデストラクタの適切な仮想動作に依存しているようです。一般に、TComponentでは実際にはエラーに近いものです。 –
はい、そうです。それは、それが_子孫ではないという意味で「隠している」かもしれませんが、私がそれを '継承された'によって呼び出すので、それは何か違いはありますか? –