私は C# が初めてなので、アクセサーとオブジェクト初期化子は私にとってまったく新しい概念です。そうは言っても、次の例が本当に混乱していることを除いて、私はそれらをうまく処理していると思います。
using System;
using System.Collections.ObjectModel;
class How {
public ObservableCollection<int> Coll {
get { return coll_; }
set {
Console.WriteLine("Setter for Coll Called!");
coll_.Clear();
foreach (int i in value)
coll_.Add(i);
}
}
public string Field {
get { return field_; }
set {
Console.WriteLine("Setter for field called");
field_ = value;
}
}
// To confirm the internal coll_ is actually set
public void Test() {
foreach(int i in coll_)
Console.Write(i + " ");
}
public How() {
coll_ = new ObservableCollection<int>();
field_ = "";
}
private ObservableCollection<int> coll_;
private string field_;
}
public class Test {
public static void Main() {
var how = new How {
Coll = { 1, 2, 3, 4, 5 },
Field = "Test Field",
};
Console.Write("Coll: ");
foreach (int i in how.Coll)
Console.Write(i + " ");
Console.WriteLine();
Console.WriteLine("Field: " + how.Field);
Console.Write("Internal coll_: ");
how.Test();
Console.WriteLine();
}
}
上記のコードの出力は次のとおりです (実例はこちらをご覧ください):
Setter for field called
Coll: 1 2 3 4 5
Field: Test Field
Internal coll_: 1 2 3 4 5
Field
期待どおりに動作しますが、Coll
混乱します。これColl
は、コレクション初期化子がプロパティ (または少なくとも非自動プロパティ) と混合しないことを意味します。ただし、その場合は、コンパイル時のエラーが予想されます。
動作のその部分に関係なく、私をさらに混乱させるのは、の内部値coll_
が何らかの形で初期化子の値に設定されていることです。
Coll
a)の set が呼び出されない理由と、C# で の値を設定する方法を知りたいですcoll_
。Coll
C# がcoll_
内部ストレージとして識別するのに十分なget および set アクセサーでのその識別子の使用です。それとも、対応する型の唯一のメンバーであるため設定されているのでしょうか?