1
私はクラスFoo
と公開フィールドMyField
を持っています(私は知っています、悪いデザイン、何年も前にツールで自動生成されましたが、自動プロパティに向かうためにコードを再生成する計画は最近ありません) )とFoo
から派生するクラス:フィールドがコンストラクタ内でヌル(またはデフォルト値)になることはありませんか?
public class Foo
{
public int MyField;
}
public class Bar : Foo
{
}
今Foo
のコンストラクタ内で、私は条件が通過することはありませんと仮定して私には疑わしいチェックがあります:
if(this.MyField != 0) ...
フィールドが設定されていませんベースクラスのコンストラクタで。したがって、私の質問は、この小切手が今まで通り抜ける可能性はありますか?
次のような場合には、その質問に答えるために、私の心に来た:
MyField
のための別のデフォルト値を設定しますBar
クラス。これはBar
のコンストラクタ内でのみ可能であり、したがって、後にチェックをを実行します - >チェックwon'tパス- コンストラクタチェイン
Bar
に。チェック自体は再びBar
のコンストラクタが実行される前を実行する - >チェックが、私はどのような場合に不足しているわけではないので、ちょうど私can'tそのチェックを、省略することを願って再び
失敗しますか?
実際にその中で何が行われますか? – Evk
@エヴァークなぜこれは何の役割を果たしますか?とにかくフィールドの値はifブロック内で変更されます。しかし、私は実際にその点に来る条件に興味があります。 – HimBromBeere
本当に 'Foo'コンストラクタで、' Bar'ではありませんか?後者の場合、何かが基底クラスで変更された場合(例えば、フィールドが明示的に初期値を取得する場合など)、互換性を保証するためのチェックであると仮定します。 – Sinatr