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

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

Mary-Kate Olsen
Mary-Kate Olsen원래의
2025-01-15 13:41:44330검색

Why Are Parentheses Optional in C# 3.0 Object Initializer Constructors?

C# 3.0에서 개체 초기화 생성자에 선택적 괄호를 도입한 이유는 무엇인가요?

구문적 편의로서 C# 3.0에서는 매개 변수가 없는 생성자가 있는 경우 개체 이니셜라이저의 생성자 호출에서 괄호를 생략할 수 있습니다. 예:

<code class="language-c#">var x = new XTypeName { PropA = value, PropB = value }; // 括号可选</code>

옵션 괄호를 사용하는 이유

C# 팀은 다음 고려 사항에 따라 괄호를 선택 사항으로 만들기로 결정했습니다.

  • 중복 제거: 생성자에 매개변수가 없으면 괄호는 추가 정보를 제공하지 않습니다.
  • 낮은 개발 비용: 이 선택적 구문을 처리하도록 파서를 수정하는 것은 전체 개체 초기화 기능에 비해 상대적으로 간단합니다.
  • 최소 모호성: 이번 변경으로 인해 새로운 모호성이 발생하지 않아 개발자가 쉽게 사용하고 IDE를 분석할 수 있습니다.
  • 일반적인 사용에서 가장 좋은 점: 객체 이니셜라이저는 생성자에 매개변수가 없는 객체의 속성을 설정하는 데 자주 사용됩니다.

모든 기본 생성자 호출에서 괄호를 선택 사항으로 만드는 것은 어떨까요?

일반적인 경우에 선택적 괄호를 사용하면 다음 예와 같이 의미가 모호해질 수 있습니다.

<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의 새 인스턴스를 생성하고 기본 생성자를 호출합니다. 1행에서 괄호를 선택 사항으로 만들면 모호성이 발생하므로 컴파일러는 이 문제를 해결하기 위해 복잡한 규칙을 도입해야 합니다. 이러한 추가 복잡성으로 인한 잠재적 비용은 이 경우 선택적 괄호의 이점보다 큽니다.

위 내용은 C# 3.0 개체 이니셜라이저 생성자에서 괄호가 선택 사항인 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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