문제

나는이 두 가지를 최근에 보았고 약간 혼란스러워합니다.

var blah = new MyClass() { Name = "hello" } 

그리고

var blah = new MyClass { Name = "hello" } 

차이점이 뭐야? 그리고 그들은 왜 둘 다 일합니까?

업데이트:이것은 생성자에 무언가가있는 경우 첫 번째를 호출 해야하는 계산을 수행한다는 것을 의미합니까?

도움이 되었습니까?

해결책

내가 아는 한, 그들은 정확히 동일합니다. C# 사양 (또는 적어도 Microsoft의 IT 구현)을 사용하면 Curly Brackets를 사용하는 한 기본 생성자 (매개 변수 없음)를 사용할 때 (즉)를 생략 할 수 있습니다 (즉, 구문의 구문은 구문입니다. 객체 이니셔저). 객체 이니셜 라이저는 여기에서 생성자와 차이가 없습니다. new MyClass 비트는 여전히 기본 생성자에 대한 호출로 별도로 해석됩니다. 개인적으로, 나는 당신이 항상 일관성을 위해 둥근 브래킷 ()을 포함하는 것이 좋습니다 - 필요 객체 이니셜 라이저가 없을 때 다음과 같은 경우.

다른 팁

차이가 없습니다. 첫 번째 형태는 당신이 ~이다 또한 생성자 호출 :

class Ö {
    public string Ä { get; set; }
    public string Å { get; set; }
    public Ö() { Å = "dear";}
    public Ö(string å) { Å = å; }    
}

Console.WriteLine(new Ö { Ä = "hello" }.Å);
Console.WriteLine(new Ö("world") { Ä = "hello" }.Å);

결과 :

dear
world

위의 주석에 추가하려면 추가 사항을 추가하면 어떤 생성자 또는 INIT 메소드가 호출되는지 명확히하는 데 도움이됩니다. 확실히 스타일 측면도 ....

일부 사용자는 생성자를 호출하기 위해 ()의 명확성을 좋아하지만 IIRC, C ++ (또는 첫 번째 버전)는 괄호없이 생성자를 호출 할 수 있기 때문에 객체 초기화기의 () 양식을 유지한다고 생각합니다. 두 번째 추측, 그들 (언어 디자이너)은 C#에 JSON과 같은 구조를 만들기 위해 기대어 있습니다. 나는 두 번째 형태를 선호한다.

VB.NET의 속성 (너무 나쁘지만)과 마찬가지로 차이는 없습니다 (너무 나쁘지만)는 두 가지 형태로 변수를 할당 할 수 있습니다 : button1.height = 100 button1.height () = 1000 끔찍한 절름발이.

실제로 기본 빈 생성자가없는 유형을 처리 할 때까지는 큰 차이가 없습니다. 이 경우 "새로운 someclass (필수 어법) {prop1 = 1, prop2 = 2}"와 같은 글을 쓸 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top