私は、動作するとは思っていない、実際に動作する、奇妙なものを発見しました。私は、コンストラクタ基底クラスから(一定の)プロパティサブクラスにアクセスすることができる:サブクラス 'プロパティから基本クラス'コンストラクタにアクセス
public abstract class Parent {
public Parent() {
var constName = ConstName; // <-- surprisingly, this works
var randomName = RandomName; // <-- surprisingly, this works
}
public abstract string ConstName { get; }
public abstract string RandomName { get; }
}
public class Child : Parent {
public override string ConstName { get { return "Mike"; } }
public override string RandomName { get { return new Random().Next().ToString(); } }
}
Name
非静的性なくフィールドです。私はいつもタイプのイニシャライザ(static
とconst
フィールド)が実行され、次にその基本クラスのもの、次にベースのctor、次にサブクラスのctorが実行されたと考えました。 これは、子プロセスが親プロセス中に完全に構築されていないことを意味します。
は、すべての状況下で動作します。この「法的な」C#のですか?なぜこれは機能しますか?
編集:
いいえ、デュープの質問ではありません。私の質問にはクラススキーマはありません。
親の中にNameプロパティがあります。技術的にはこれは正当なものです。 –
@Nikitaはい、しかし子供はまだ建設されていません。私の質問で初期化の順序を読んでください。 –
だから、あなたがデバッグしてベース建設に行くと、あなたはマイクとして名前がついていると言っていますか? –