C# では、現在、自動生成されたプロパティはありません (ただし、VB.NET の自動プロパティはこれを行うことができます)。これは、私がしばしば自分自身に望んでいたことです。そのため、独自のプロパティを手動でロールするか、コンストラクターを使用できます。
いずれにせよ、これを行うために記述する必要のないコードがいくつかあります (コンストラクターを使用しない手動プロパティと、コンストラクターを使用する自動プロパティ)。
ただし、興味深いことに、IL は 2 つのオプションで異なります。初期化子を使用してバッキング フィールドを持つ手動プロパティがある場合、C# の基本クラス コンストラクターの前に実行されます。
MyClass..ctor:
IL_0000: ldarg.0
IL_0001: newobj System.Collections.Generic.List<System.Object>..ctor
IL_0006: stfld UserQuery+MyClass._products
IL_000B: ldarg.0
IL_000C: call System.Object..ctor
IL_0011: nop
IL_0012: ret
コンストラクターで初期化を伴う自動プロパティを使用すると、C# の基本クラス コンストラクターの後に実行されます。
MyClass..ctor:
IL_0000: ldarg.0
IL_0001: call System.Object..ctor
IL_0006: nop
IL_0007: nop
IL_0008: ldarg.0
IL_0009: newobj System.Collections.Generic.List<System.Object>..ctor
IL_000E: call UserQuery+MyClass.set_Products
IL_0013: nop
IL_0014: nop
IL_0015: ret
.NET で初期化順序に依存するコードを記述することは危険な場合があるため、これは単なる好奇心として言っているだけです (実際、初期化順序は VB.NET と C# で少し異なります)。