>백엔드 개발 >C++ >C#에서 일반 개방형을 사용하면 목록 초기화가 실패하는 이유는 무엇입니까?

C#에서 일반 개방형을 사용하면 목록 초기화가 실패하는 이유는 무엇입니까?

DDD
DDD원래의
2025-01-11 06:00:42280검색

Why Does List Initialization Fail with a Generic Open Type in C#?

C# 일반 개방형 목록 초기화 실패: 해결책

Data<T>과 같은 일반 개방형 유형 및 해당 폐쇄형 생성 유형(예: StringData, DecimalData)으로 작업할 때 List<Data>을 사용하여 목록을 생성하려고 하면 컴파일러 오류가 발생합니다. '데이터'에는 1개의 유형 인수가 필요합니다." 이는 C#이 개방형 일반 형식에 대해 다이아몬드 연산자를 지원하지 않기 때문입니다. 구체적인 유형 인수가 항상 필요합니다.

문제 설명

목록을 생성하려면 컴파일러가 Data<T> 클래스 내의 특정 유형을 알아야 합니다. List<Data>은 모호합니다. T가 나타내는 유형이 무엇인지 지정하지 않습니다.

효과적인 솔루션

이 문제를 해결하기 위한 두 가지 실용적인 접근 방식은 다음과 같습니다.

  1. 인터페이스 구현: IData 및 해당 파생 유형이 구현하는 인터페이스(예: Data<T>)를 만듭니다. 그런 다음 목록을 List<IData>으로 선언하세요. 이는 다형성을 활용하여 동일한 목록에 다양한 Data<T> 유형의 인스턴스를 저장할 수 있게 해줍니다.

  2. 추상 기본 클래스: DataBase에 대한 추상 기본 클래스(예: Data<T>)를 정의합니다. 이 기본 클래스에서 구체적인 유형을 파생시킵니다. 그런 다음 List<DataBase> 목록을 만들 수 있습니다. 이는 강력한 타이핑을 제공하지만 인터페이스 접근 방식에 비해 일반성이 떨어집니다.

고려사항

두 가지 방법 모두 어느 정도 디자인이 복잡해집니다. 선택은 애플리케이션의 특정 요구 사항에 따라 달라집니다. 인터페이스는 더 큰 유연성을 제공하는 반면 추상 기본 클래스는 보다 구조화된 접근 방식을 제공합니다.

추가 자료

C#의 제네릭, 변형 및 다형성에 대한 자세한 내용은 다음 리소스를 참조하세요.

위 내용은 C#에서 일반 개방형을 사용하면 목록 초기화가 실패하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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