C# 3.0 개체 초기화 생성자의 선택적 대괄호
C# 3.0에서는 개체 이니셜라이저 구문을 사용하여 개체를 초기화할 때 생성자에 매개 변수가 없으면 생성자 주위의 괄호를 생략할 수 있습니다. 이는 유형 이름 뒤의 중괄호가 객체 초기화 프로그램의 시작을 나타내기 때문입니다.
디자인 고려사항
괄호를 선택 사항으로 만들기로 한 결정은 다음을 포함한 여러 요인에 의해 결정되었습니다.
모호성 고려
선택적 괄호는 개체 이니셜라이저의 컨텍스트에서는 문제가 되지 않지만, 개체 이니셜라이저 없이 기본 생성자 호출에 적용하면 모호함이 발생할 수 있습니다. 다음 코드를 고려해보세요:
<code class="language-c#">class P { class B { public class M { } } class C : B { new public void M(){} } static void Main() { new C().M(); // 1 new C.M(); // 2 } }</code>
라인 1에서는 새 C 객체를 생성하고 인스턴스 메서드 M을 호출합니다. 2행에서는 새로운 B.M 객체를 생성하고 해당 생성자를 호출합니다. 2행의 괄호가 선택 사항인 경우 C.M이 C의 생성자를 참조하는지 아니면 B에 중첩된 M 클래스를 참조하는지가 불분명하므로 프로그램이 모호해집니다.
휴리스틱 기반 명확성
잠재적인 모호성을 해결하기 위해 컴파일러는 경험적 방법을 사용하여 코드의 의도를 파악합니다. 예를 들어 도트 식별자와 동일한 이름을 가진 유형, 필드 또는 메서드가 있는 경우 도트 식별자는 해당 멤버를 참조하는 것으로 간주됩니다. 그러나 사용된 경험적 방법이 항상 예상한 해석으로 이어지는 것은 아니며, 특히 복잡한 코드에서는 더욱 그렇습니다.
위 내용은 C# 3.0 개체 이니셜라이저에서 괄호가 선택 사항인 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!