C#では、インスタンス フィールド初期化子が別のフィールドを参照することはできません。たとえば、このコードは無効です:
class A
{
string s1 = "";
string s2 = s1;
}
「s2」は「s1」を参照しているためです。
しかし、なぜこれが許可されていないのでしょうか?
私の最初の考えは、C#の仕様は初期化順序を保証していないということでしたが、仕様によれば、順序は宣言の順序です。
変数初期化子は、クラス宣言に現れるテキストの順序で実行されます。
順序が決定論的である場合、この種のコードの落とし穴は何でしょうか?
よろしくお願いします。
編集 :
Hps、0xA3、およびPeterの回答によると:
継承シナリオでの初期化の順序は非常に混乱する可能性があります。
そのような機能を実装するには、コンパイラ開発チームからのリソースが必要になりますが、メリットはほとんどありません。
論理的な理由でメソッドやプロパティを使用することはできません ( Peterに感謝します)。したがって、一貫性を保つために、フィールドについても同じことが当てはまります。