클래스의 일반 가변성에 대한 C# 4.0의 제한
인터페이스와 달리 C# 4.0은 클래스에 대한 일반적인 변형을 허용하지 않습니다. 이 제한은 다음과 같은 질문을 촉발합니다: 제한이 왜 필요한가? 클래스에 대한 일반적인 변형을 활성화하면 잠재적인 단점은 무엇입니까?
공변 클래스의 과제
공변 클래스 C<T>
를 상상해 보세요. 공분산을 구현하려면 T
는 엄격하게 출력 유형이어야 합니다. 이는 클래스가 T
를 입력으로 사용하는 메서드나 속성을 가질 수 없음을 의미합니다. 마찬가지로 T
유형의 필드는 기본적으로 속성 설정자와 같은 기능을 하기 때문에 허용되지 않습니다.
제한된 적용 범위: 불변 구조
공변 클래스를 현실적으로 적용할 수 있는 유일한 방법은 목록이나 스택과 같은 불변 구조입니다. 불변 클래스는 이점을 제공하지만 이 제한된 사용 사례는 불변 클래스 유형에 대한 공분산을 기본적으로 지원하는 상당한 오버헤드를 정당화하지 않습니다.
예시: 잠재적 이점
공변 Stack<T>
은 이론적으로 다음과 같은 코드를 허용할 수 있습니다.
<code class="language-csharp">Stack<string> strings = null; strings = strings.Push("hello"); strings = strings.Push("goodbye"); Stack<object> objects = strings; objects = objects.Push(123);</code>
여기서 문자열 스택에 정수를 추가하면 불변 구조가 유형 안전성을 손상시키는 작업을 방지하므로 유형이 안전합니다.
요약
클래스에 대한 일반적인 변형이 몇 가지 이점을 제공할 수 있지만 클래스 유형 매개변수를 메서드 또는 속성 입력으로 사용할 수 없다는 제약이 이점보다 더 큽니다. 이는 C# 4.0 이상 버전에서 이 기능이 없음을 설명합니다.
위 내용은 C# 4.0이 클래스에 대한 일반 가변성을 지원하지 않는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!