2013-06-26 4 views
1

다음과 같은 일반 컬렉션에서 상속 사용이 나타났습니다.콜렉션에서 T를 상속받습니다. <T>

class Model : Collection<Model> 
{ 
    public string Name { get; set; } 
    public string Password { get; set; } 
} 

그리고 그것은으로 인스턴스화 할 수 있습니다

var model = new Model {Name = "Name1", Password = "Pass1"}; 
model.Add(new Model { Name = "Name2", Password = "Pass2" }); 
model.Add(new Model { Name = "Name3", Password = "Pass3" }); 

내가 단일 인스턴스뿐만 아니라 컬렉션 개체로 model 모두에 액세스 할 수 있습니다.

Console.Out.WriteLine("Original: " + model.Name + " : " + model.Password + Environment.NewLine); 

foreach (var m in model) 
{ 
    Console.Out.WriteLine(m.Name + " : " + m.Password + Environment.NewLine); 
} 

어떻게 가능하며 실제로 커버 아래에서 무엇이 일어나고 있습니까?

편집 : 더 명확히하기 위해, model 단일 I는 (이름 1) model.Name 액세스 할 수있는, 분리 된 인스턴스가 아닌 I는 model[0].Name (NAME2)에 액세스 할 수 콜렉션의 부분을 갖는다. 이 이중 성질은 나를 혼란스럽게합니다.

+2

왜 그렇게해서는 안됩니까? 컬렉션 >을 몇 가지 추가 종소리와 휘파람과 함께 사용하면됩니다. – AlliterativeAlice

+1

나는 당신이 여기서 무엇을 묻고 있는지 잘 모르겠습니다. 코드의 마지막 블록 ('단일 인스턴스와 컬렉션 객체'를 참조하는 곳)는'foreach' 루프를 통해 컬렉션의 각 항목을 반복하는 것입니다. 즉,'model' 컬렉션을 반복합니다. 콜렉션의 각 항목을 변수 m에 할당하고 변수 m에 액세스합니다. 여기에는 "둘 다"가 없으며 게시 된 코드에서 "커버 아래에"아무 것도 일어나지 않습니다. (나는하지 않았습니다. downvote - 당신의 qeustion은 분명하지 않고, 우리가 묻고있는 것을 명확하게하기 위해 [편집]을 요청합니다.) –

+0

코드에 대해 이상하게 혼란스러운 점만 제외하면 –

답변

2

는 약

class Model : Collection<Model> 

처음에 나는 이것이 아주 좋은 생각처럼 보이지 않는 점에 유의하고 싶습니다.

그러나보기에는 혼란스럽지 않습니다. 순환 상속은 없으며 Model 유형에 대한 전방 참조 만 있습니다.

약간 더 제정신 버전 : 여기

class Model 
{ 
    public List<Model> SubModels { get; set; } 
} 

List<>은 아직 완전히 정의되지 않은 유형이 포함되어 있습니다.

+0

아마도'SubModels' 외에'Model'에도 다른 속성이있을 것입니다. 그렇지 않으면, 그것은 단지 아래로 거북이입니다. –

관련 문제