C#은 광범위한 사용자 정의를 제공하지만 특히 일반 속성 유형은 제외합니다. 이 제한은 다음과 같은 질문을 촉발합니다: 왜?
일반 유형 매개변수를 사용하여 사용자 정의 속성을 정의하려고 하면 다음과 같은 컴파일 시간 오류가 발생합니다.
<code class="language-csharp">public sealed class ValidatesAttribute<T> : Attribute { } [Validates<string>] public static class StringValidation { }</code>
공용 언어 인프라(CLI)는 일반 속성을 지원하지만 C#에서는 이를 특별히 허용하지 않습니다. 이는 CLI 제한이 아니라 내부 C# 디자인 선택입니다.
이 금지 사항의 정확한 이유를 정확히 찾아내는 것은 어렵습니다. C# 언어 사양은 명확한 설명을 제공하지 않습니다. 그러나 커뮤니티 토론과 전문가 의견은 여러 가지 가능성을 제시합니다.
한 가지 이론에서는 일반 속성 유형이 언어와 컴파일러에 불필요한 복잡성을 초래할 것이라고 가정합니다. 이 기능을 지원하려면 안정성과 성능을 유지하기 위해 추가적인 언어 메커니즘과 컴파일러 최적화가 필요합니다.
또 다른 관점은 일반 속성의 실제 적용이 제한되어 있고 개발 비용이 잠재적인 이점보다 크다는 것입니다. C# 디자이너는 다른 기능을 우선시했을 수도 있습니다.
전 C# 팀 멤버였던 Eric Lippert는 간결하게 설명했습니다. 제한적인 실제 가치가 있는 기능에 대해 언어와 컴파일러 모두에서 불필요한 복잡성을 피하기 위해 제한이 존재한다는 것입니다. 완전히 만족스럽진 않지만 이 통찰력은 C# 디자인 선택 뒤에 숨은 의사 결정 과정을 조명합니다.
위 내용은 C#에서 일반 속성 유형을 허용하지 않는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!