는 List<T>
처럼 유사하게 초기화 할 수 있도록 내가 클래스를 정의 할 수 있습니다 방법 :개체 초기화 목록으로 <> 구문
List<int> list = new List<int>(){ //this part };
예를 들어,이 시나리오 :
Class aClass = new Class(){ new Student(), new Student()//... };
는 List<T>
처럼 유사하게 초기화 할 수 있도록 내가 클래스를 정의 할 수 있습니다 방법 :개체 초기화 목록으로 <> 구문
List<int> list = new List<int>(){ //this part };
예를 들어,이 시나리오 :
Class aClass = new Class(){ new Student(), new Student()//... };
이 (Collection<Student>
에서 상속하여 말) 직접 Class
에 collection-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"섹션을 참조하십시오.
하지만 ICollection 및 IEnumarable에도 void Add() 메서드가 있습니다. IList만이 it.It이 IList를 구현해야한다는 것을 의미합니다 (예제가 잘 작동 함에도 불구하고 더 나은 방법입니다). – kr85
'ICollection
당신이 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
의 공개 컬렉션을 포함.
제네릭 구현을 제안하는 사람이 없었으므로 여기에 나와 있습니다.
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};
클래스가 IList에서 상속합니까? – ken2k
@ ken2k : 아니요, 그럴까요? – kr85