C# 객체 초기화 프로그램에서 생성자 괄호 생략을 허용하는 이유
C# 3.0에는 생성자에 매개 변수가 없는 생성자가 있는 경우 생성자의 괄호를 생략할 수 있는 선택적 구문을 허용하는 개체 이니셜라이저가 도입되었습니다. 전직 C# 컴파일러 팀 리더인 Mads Torgersen이 설명했듯이 이 기능에는 다음과 같은 몇 가지 장점이 있습니다.
디자인 고려 사항:
기술적 구현:
모호함 방지:
객체 이니셜라이저에서는 괄호를 생략할 수 있지만 객체 이니셜라이저가 없는 객체 생성 표현식에서는 여전히 필요합니다. 이 경우 괄호를 생략하면 다음 예와 같이 모호성이 발생할 수 있기 때문입니다.
<code class="language-csharp">class P { class B { public class M { } } class C : B { new public void M(){} } static void Main() { // 调用默认构造函数,然后是方法 M new C().M(); // 1 // 使用默认构造函数创建一个新的 B.M 实例 new C.M(); // 2 } }</code>
1행에서 선택적 대괄호를 생략하면 컴파일러는 C의 기본 생성자를 호출할지 아니면 새 B.M 인스턴스를 생성할지 결정할 수 없습니다. 이는 의미론적 모호성과 잠재적인 오류로 이어질 것입니다.
따라서 선택적 생성자 괄호는 개체 이니셜라이저로 제한됩니다. 여기서 이를 생략해도 언어의 구문이나 의미에 위험이 발생하지 않습니다.
위 내용은 C# 개체 이니셜라이저에서 선택적 생성자 괄호가 허용되는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!