C# 3 では、初期化子が追加されました。これは素晴らしい機能です。ただし、1 つのことが私を混乱させます。
クラスを初期化するときは、通常、初期化するメンバー変数またはプロパティを指定する必要があります。例えば:
class C { public int i; }
public void blah() {
C c = new C() { i = 1 };
}
配列のセマンティクスは最初から C# にあったと思います。しかし、彼らはそのように振る舞いません。例えば
public void foo()
{
int[] i = new int[] { 0, 1, 2, 3 };
}
すべて問題ありませんが、配列セマンティクスを持つクラスはどうでしょうか?
public void bar()
{
List<int> li = new List<int>() { 0, 1, 3, 3 };
}
List は、他のものと同様に単なるクラスです (ジェネリックですが)。
コンパイラが List メンバーを初期化する方法を理解しようとしています。これは舞台裏で行われるある種の魔法ですか?それとも、これはクラスで定義されたインデクサーがあることに関連していますか?
ありがとう。