> 백엔드 개발 > C++ > 일부 C# 개체 이니셜라이저에서는 괄호가 선택 사항이지만 다른 개체 이니셜라이저에서는 필수인 이유는 무엇입니까?

일부 C# 개체 이니셜라이저에서는 괄호가 선택 사항이지만 다른 개체 이니셜라이저에서는 필수인 이유는 무엇입니까?

Mary-Kate Olsen
풀어 주다: 2025-01-15 13:37:43
원래의
702명이 탐색했습니다.

Why Are Parentheses Optional in Some C# Object Initializers but Required in Others?

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

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿