2011-12-26 3 views
3

List<T>처럼 유사하게 초기화 할 수 있도록 내가 클래스를 정의 할 수 있습니다 방법 :개체 초기화 목록으로 <> 구문

List<int> list = new List<int>(){ //this part }; 

예를 들어,이 시나리오 :

Class aClass = new Class(){ new Student(), new Student()//... }; 
+0

클래스가 IList에서 상속합니까? – ken2k

+0

@ ken2k : 아니요, 그럴까요? – kr85

답변

6

이 (Collection<Student>에서 상속하여 말) 직접 Classcollection-initializer 구문은,이 같은 ICollection<Student> 또는 이와 유사한 같은 컬렉션 인터페이스를 구현 할 수 있도록.

기술적으로 말하기 만하면 IEnumerable이 아닌 일반 인터페이스를 구현하고 호환 가능한 Add 메서드 만 있으면됩니다.

그래서 충분히 좋은 것 :

using System.Collections; 

public class Class : IEnumerable 
{ 
    // This method needn't implement any collection-interface method. 
    public void Add(Student student) { ... } 

    IEnumerator IEnumerable.GetEnumerator() { ... } 
} 

사용법 :

Class temp = new Class(); 
temp.Add(new Student()); 
temp.Add(new Student()); 
Class aClass = temp; 

: 예상 할 수 있듯이

Class aClass = new Class { new Student(), new Student() }; 

는, 컴파일러에 의해 생성 된 코드는 유사합니다 자세한 내용은 language specification의 "7.6.10.3 Collection initializers"섹션을 참조하십시오.

+0

하지만 ICollection 및 IEnumarable에도 void Add() 메서드가 있습니다. IList만이 it.It이 IList를 구현해야한다는 것을 의미합니다 (예제가 잘 작동 함에도 불구하고 더 나은 방법입니다). – kr85

+0

'ICollection '에는 ['Add'] (http://msdn.microsoft.com/en-us/library/63ywd54z.aspx) 메서드가 있지만 컴파일러가 바인딩하는 메서드는 해당 인터페이스에서 올 필요가 없습니다 (예제에서와 같이). IList 을 구현할지 여부는 콜렉션이 색인에 의한 빠른 액세스를 지원해야하는지 여부에 달려 있습니다. – Ani

1

당신이 MyClass을 정의하는 경우 학생 컬렉션으로 :

public class MyClass : List<Student> 
{ 
} 

var aClass = new MyClass{ new Student(), new Student()//... } 

정말 당신이 클래스를 모델링하는 방법에 따라 하나를 선택

public class MyClass 
{ 
    public List<Student> Students { get; set;} 
} 

var aClass = new MyClass{ Students = new List<Student> 
            { new Student(), new Student()//... }} 

: Student의 공개 컬렉션을 포함.

0

제네릭 구현을 제안하는 사람이 없었으므로 여기에 나와 있습니다.

class Class<T> : IEnumerable 
{ 
    private List<T> list; 
    public Class() 
    { 
     list = new List<T>(); 
    } 

    public void Add(T d) 
    { 
     list.Add(d); 
    } 

    public IEnumerator GetEnumerator() 
    { 
     return list.GetEnumerator(); 
    } 
} 

사용 :

일반적으로
Class<int> s = new Class<int>() {1,2,3,4};