>백엔드 개발 >C++ >C# 3.0 개체 이니셜라이저에서 괄호가 선택 사항인 이유는 무엇입니까?

C# 3.0 개체 이니셜라이저에서 괄호가 선택 사항인 이유는 무엇입니까?

Susan Sarandon
Susan Sarandon원래의
2025-01-15 13:32:44899검색

Why Are Parentheses Optional in C# 3.0 Object Initializers?

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.