C#では、オブジェクト初期化子はパブリックの非読み取り専用フィールドとプロパティを設定できます。
ただし、匿名タイプの場合、プロパティは読み取り専用です。では、.NETはどのようにオブジェクトの初期化にそれらを設定しますか?
C#では、オブジェクト初期化子はパブリックの非読み取り専用フィールドとプロパティを設定できます。
ただし、匿名タイプの場合、プロパティは読み取り専用です。では、.NETはどのようにオブジェクトの初期化にそれらを設定しますか?
すべての読み取り専用プロパティと同様に、コンストラクターで設定できます。
匿名型のコンストラクターは、それを使用して生成され、フィールドはそれを介して設定されます。
匿名型のオブジェクト初期化子は、通常のオブジェクト初期化子のようには動作しません。つまり、プロパティを直接設定しません。これは、読み取り専用フィールドを変更できるコンストラクターへの呼び出しに変換されます。
さらに、リフレクションを介して、または作成後にマネージド コードのパッチを適用することで設定できます。
たとえば、適切なバインド フラグを使用してフィールドを取得し、列挙して正しいパラメータで SetValue を呼び出します...