C# 개체 이니셜라이저 생성자의 선택적 대괄호: 이유 및 명확성
C# 3.0에서는 개체 이니셜라이저 생성자를 사용하면 매개 변수가 없는 생성자가 있는 경우 괄호를 생략할 수 있습니다. 이 기능은 다음 요소를 기반으로 추가되었습니다.
기본 생성자 호출에서 괄호가 누락되었습니다
그러나 개체 이니셜라이저가 없는 개체 생성 식에서는 기본 생성자 호출에 괄호가 여전히 필요합니다. 이 제한은 모호함을 피하기 위한 것입니다. 예를 들어 다음 코드에서는
<code class="language-csharp">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의 인스턴스를 생성하고 기본 생성자를 트리거합니다. 1행의 대괄호가 선택사항인 경우 2행은 C.M을 참조할 수도 있으므로 모호해집니다.
모호한 탐지 방법
C# 함수의 모호성을 확인하는 데는 여러 가지 방법이 필요합니다.
잠재적인 모호함의 예
새 접두사 연산자 "frob" 추가를 고려하세요.
<code class="language-csharp">x = frob 123 + 456;</code>
이는 123 456의 결과에 대해 frob 연산을 수행하거나 x라는 frob 유형의 변수에 10을 할당하는 것으로 해석될 수 있습니다.
또 다른 예에서 C# 2.0의 다음 표현식은 모호합니다.
<code class="language-csharp">yield(x);</code>
반복자에서 x를 생성하는 것을 의미할 수도 있고, x를 매개변수로 사용하여 항복 메서드를 호출하는 것을 의미할 수도 있습니다. 이를 "yield return(x)"로 변경하면 모호성이 제거됩니다.
위 내용은 일부 C# 개체 이니셜라이저에서는 괄호가 선택 사항이지만 다른 개체 이니셜라이저에서는 필수인 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!