これは簡単に回避できますが、言語機能を使用できるかどうか、あるいは言語によっては禁止されているということがクラス設計に論理的な誤りを起こしているということだけが不思議です。どのように私は両方のコンストラクタの初期化子、base()とthis()を呼び出しますか?
私は再利用のためにそれを「硬化」を助けるために私のコードの自己評価をやっていると私はちょうどaccrossに来た:
public partial class TrackTyped : Component
{
IContainer components = null;
public TrackTyped()
: base()
{
InitializeComponent();
}
public TrackTyped(IContainer container)
: base()
{
container.Add(this);
InitializeComponent();
}
}
を私は同じコード行を見たとき、私は通常、何2つのコンストラクタは "this()"でもう一方の呼び出しを行いますが、私はそれを行うように見えません。私が唯一それらのいずれかを持つことができると言っています
10.11 Instance Constructors
constructor-declarator:
identifier ( formal-parameter-listopt ) constructor-initializeropt
constructor-initializer:
: base ( argument-listopt )
: this ( argument-listopt )
:私はスペック権利を読めば
は(私はちょうどので、私は右ではないかもしれないスペックを読み取ろうと始めました)。
質問:10.11は両方を呼び出す必要がないことを意味するか、または単に言語が呼び出すことだけをサポートしていることを暗示していますか?
ありがとうございました(分かりましたが、分かりませんでした。分前に)回答: –
いいえ、私は何らかの理由で自分自身の答えを考えていませんでした - 私はcontainer.Addと思わない)は、InitializeComponent()の前に発生する必要があります - それは私はおそらくそれが賢いデザインの兆候だったと自分自身に尋ねるだろう。この例では –
、 "new TrackedType()"が最初に実行され、次に.Add()が実行されます。個人的には、私はそれをより明確に見出します。おそらく後でそのことを覚えておいてください。 – sgtz