저는 C#을 처음 접했기 때문에 접근 자 및 개체 이니셜 라이저는 완전히 새로운 개념입니다. 즉, 나는 다음과 같은 예를 제외하고 그들에 괜찮은 핸들을 생각했다 정말 나를 혼란 :개체 및 컬렉션 이니셜 라이저 및 액세스 도구
Setter for field called
Coll: 1 2 3 4 5
Field: Test Field
Internal coll_: 1 2 3 4 5
Field
:
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 참조) 정확히 예상대로 작동하지만 Coll
은 나를 혼란스럽게합니다. setter는 Coll
으로 결코 호출되지 않습니다. 이는 Collection Initializers가 Properties와 (또는 최소한 자동 속성이 아닌) Message를 섞지 않는다는 것을 의미합니다. 그러나 그 경우 컴파일 타임 오류가 예상됩니다.
동작의 해당 부분과 관계없이 내게 더 혼란스러운 점은 coll_
의 내부 값이 어떻게 든 초기화 자 값으로 설정된다는 것입니다.
나는 Coll
의 집합이 호출되지 않는 이유와 C#이 coll_
의 값을 설정할 수있는 방법을 알고 싶어합니다. 내부 저장소로 coll_
을 식별하기에 충분하도록 Coll
의 get 및 set 접근 자에서 해당 식별자를 사용하고 있습니까? 또는 해당 유형의 유일한 멤버이기 때문에 설정 되었기 때문일 수 있습니다.
이 줄은 Coll 설정 기 _Coll = {1, 2, 3, 4, 5}, _ – Steve
을 호출합니다. @ 스티브 그렇지 않습니다. 잠깐, 실제 예제로 질문을 업데이트하십시오. –
@Steve 질문에 [이] (http://ideone.com/rcYE1Y) 라이브 예제를 추가했습니다. –