C# 반환 유형 CO -Changes : -Depth 토론
객체 중심 프로그래밍에서 개발자는 종종 방법을 다시 작성할 때보다 정확한 유형 정보를 얻어야합니다. 협업 유형으로 돌아가는 것은 개념으로, 서브 클래스가 기본 클래스보다 더 구체적인 유형을 반환 할 수 있습니다. 그러나 C#은이 강력한 기능을 지원합니까?
백본 유형의 위치
C와 같은 언어는 반환 유형 조정에 널리 사용되지만 불행히도 C#은 기본적으로 지원하지 않습니다. 이것은 공개 언어가 실행될 때 C# 코드 실행의 기본 제한입니다 (CLR).
유형 안전 문제
C#은 공동 작업 유형을 반환하는 한 가지 이유는 보안 유형입니다. 서브 클래스가 기본 클래스보다 더 특정 유형을 반환 할 수있게하면 예기치 않은 불일치 및 런타임 오류가 발생할 수 있습니다. CLR의 엄격한 유형 검사 메커니즘은 객체가 시스템 전체에서 일관되게 처리되도록하며, 반환 유형 조정 변경의 도입은 이러한 안정성을 파괴 할 것입니다.
솔루션
C#은 리턴 유형 조정을 직접 지원하지는 않지만 개발자는 여전히 다른 방법을 통해 유사한 효과를 달성 할 수 있습니다. 일반적으로 사용되는 기술은 기본 클래스에 보호 된 보조 방법을 도입하는 것입니다. 이 방법은 서브 클래스가보다 구체적인 유형을 반환 할 수있는 간접 레이어를 제공하면서 유형 안전을 유지합니다.
이 예에서 수족관 클래스는 보호 된 getContents () 메소드를 다시 작성하고 새로운 공개 내용 () 방법을 제공합니다. .
최신 진행 상황 : C# 9.0의 조정
그러나 상황은 변하고 있습니다. 최근에 발표 된 C# 9.0에서 Microsoft는 공동 작업 유형을 점차적으로 지원하기위한 단계로 "Cooperative Change"라는 기능을 도입했습니다. 기본 인터페이스 또는 메소드의 매개 변수 유형 인 경우이 기능을 사용하면 개발자가 다시 쓰기 메소드에 대한보다 구체적인 반환 유형을 지정할 수 있습니다. 이것은 큰 개선이지만 여전히 완전한 반환 유형 조정의 모든 기능을 달성 할 수는 없습니다.
코드에 유형을 반환하는 상황이 발생하면 C /CLI 또는 F#과 같이이 기능을 완전히 지원하는 다른 언어를 탐색하는 것을 고려할 수 있습니다.
위 내용은 C#은 반환 유형 공분산을 지원합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!