私は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();
}
}
上記のコードの出力がされた(実際の例hereを参照してください):
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
のセットが呼び出されないのか、またC#がどのようにcoll_
の値を設定できるのかを知ることに興味があります。内部ストレージとしてcoll_
を識別するためにC#で十分であるように、Coll
のgetおよびsetアクセサでその識別子を使用しているかどうか。対応するタイプの唯一のメンバーなので設定されている可能性があります。
この行は、Coll設定ツール_Coll = {1、2、3、4、5}、_ – Steve
を呼び出します。@ Steveそれはありません。ホールドオン、ライブサンプルで質問を更新する。 –
@Steve質問に[こちら](http://ideone.com/rcYE1Y)のライブサンプルを追加しました。 –