>백엔드 개발 >C++ >C# 4.0이 클래스에 대한 일반 가변성을 지원하지 않는 이유는 무엇입니까?

C# 4.0이 클래스에 대한 일반 가변성을 지원하지 않는 이유는 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2025-01-12 21:31:45612검색

Why Doesn't C# 4.0 Support Generic Variance for Classes?

클래스의 일반 가변성에 대한 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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