{}에서 객체 매개 변수를 작성 하시겠습니까?


14

책에서 코드 조각을 해독하려고합니다.

List<Person> people = new List<Person>()
{
new Person {FirstName="Homer",LastName="Simpson",Age=47},
new Person {FirstName="Marge",LastName="Simpson",Age=45}
};

사람은 이름, 성 등 다양한 필드로 구성된 간단한 수업입니다.

내가 이해하지 못하는 것은 대괄호가 아닌 Person의 생성자에게 매개 변수를 보내지 않습니까? 이 코드를 복제하려고 시도했지만 비행하지 않는 것 같습니다.

입력 해 주셔서 감사합니다.



1
"이 코드를 복제하려고했지만 비행하지 않는 것 같습니다"<-이 구문을 사용하려면 C # 3 (VS 2008) 이상을 사용해야합니다.
AakashM

두 가지 개념 (개체 초기화 및 개체 채우기)의 차이점에 유의하십시오. 일반적으로 생성자에서 초기화를 수행합니다. 예제의 방법은 초기화가 아닌 모집단에 가장 적합합니다.
NoChance

답변:


27

C #을 사용하면 개체가 초기화 될 때 중괄호로 속성 매개 변수를 지정할 수 있습니다. 이를 통해 초기화 할 항목과 기본값으로 둘 항목을 선택하고 선택할 수 있습니다.

반면에 생성자는 고정 된 매개 변수 집합을 사용하여 하나의 단일 코드 블록을 실행합니다. 따라서 동일한 효과를 얻으려면 초기화하려는 다양한 속성 조합을 사용하여 여러 생성자를 만들어야하므로 지루할 수 있습니다.

var x = new Person {FirstName="Homer",LastName="Simpson",Age=47}; 

이것과 정확히 같습니다 :

var x = new Person();
x.FirstName="Homer";
x.LastName="Simpson";
x.Age=47;

눈이 짧고 논란의 여지가 없다는 것을 제외하고.

또한 질문에 설명 된 것과 같은 구문을 허용하므로 임시 변수를 작성하고 목록에 추가하기 전에 여기에서했던 것처럼 초기화 해야하는 경우 매우 지루합니다. (어떻게 사용 했는가?) 원하는 매개 변수 목록을 가져 오는 명시 적으로 정의 된 생성자가 필요하지 않습니다.

또한 생성자 가 개인 setter를 사용하여 속성을 초기화 할 수 있지만이 예제 (제공된 예제에서 분명해야 함)는 속성에 대한 공용 setter가있는 경우에만 작동합니다. 또한 단축 된 예제는 암시 적으로 기본 (매개 변수가없는) 생성자를 호출 했으므로 존재해야합니다.


이로 인해 중괄호로 초기화 된 속성을 공개적으로 설정할 수 있어야한다고 덧붙일 가치가 있습니다.
얌 마르코비치

@YamMarcovic 아. 예. 그 효과에 메모가 추가되었습니다.
tylerl

2
아, 나는 깨달음, 훌륭한 설명입니다.
RealityDysfunction

2
단일 생성자로 매우 유사한 효과를 얻으려면 모든 매개 변수를 선택적으로 만들 수 있습니다. 그런 다음과 같은 작업을 수행 new Person(lastName: "Simpson")하여 firstNameage매개 변수 를 생략 할 수 있습니다.
svick

이것은 왜 그것들을 생성자에게 전달할 수 없는지, 즉var x = new Person("Homer", "Simpson", 47);
rayray
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.