> 백엔드 개발 > C++ > C# 목록에 유형 매개변수가 다른 여러 일반 클래스 인스턴스가 포함될 수 있습니까?

C# 목록에 유형 매개변수가 다른 여러 일반 클래스 인스턴스가 포함될 수 있습니까?

Mary-Kate Olsen
풀어 주다: 2025-01-18 16:36:09
원래의
603명이 탐색했습니다.

Can a C# List Hold Multiple Generic Class Instances with Different Type Parameters?

C#에서 일반 유형 목록을 만들 수 있나요?

C#에서는 일반 유형 매개변수를 사용하여 클래스를 생성할 수 있습니다. 그러나 다른 유형 매개변수를 사용하여 이 일반 클래스의 여러 다른 인스턴스를 포함하는 목록을 생성할 수 있습니까?

다음 예를 살펴보겠습니다.

<code class="language-csharp">public class Metadata<DataType> where DataType : struct
{
    private DataType mDataType;
}</code>
로그인 후 복사

여기에는 다양한 값 유형에 사용할 수 있는 일반 클래스 Metadata가 있습니다. 이제 다양한 유형을 가진 Metadata 객체의 목록을 만들고 싶다고 가정해 보겠습니다. 우리가 할 수 있나요?

<code class="language-csharp">List<Metadata<DataType>> metadataObjects; // 错误:DataType 未定义
metadataObjects.Add(new Metadata<int>());
metadataObjects.Add(new Metadata<bool>());
metadataObjects.Add(new Metadata<double>());</code>
로그인 후 복사

안타깝게도 C#에서는 목록의 일반 유형 매개변수가 모든 요소에 대해 동일해야 하기 때문에 이는 불가능합니다. 이러한 제한을 극복하기 위해 상속 및 추상 클래스를 사용할 수 있습니다.

<code class="language-csharp">public abstract class MetadataBase
{
}

// 继承抽象 MetadataBase 类
public class Metadata<DataType> : MetadataBase where DataType : struct
{
    private DataType mDataType;
}</code>
로그인 후 복사

이제 추상 기본 클래스 목록을 생성할 수 있습니다MetadataBase. 이를 통해 다양한 유형의 Metadata 개체를 목록에 추가할 수 있습니다:

<code class="language-csharp">List<MetadataBase> metadataObjects = new List<MetadataBase>();
metadataObjects.Add(new Metadata<int>());
metadataObjects.Add(new Metadata<bool>());
metadataObjects.Add(new Metadata<double>());</code>
로그인 후 복사

추상 기본 클래스를 사용하여 다양한 유형의 인스턴스를 보유할 수 있는 목록을 성공적으로 생성했습니다Metadata. mDataType에는 이 속성이 포함되어 있지 않기 때문에 목록에 있는 요소의 MetadataBase 속성에 액세스할 때 유형 변환이 필요하다는 점에 유의해야 합니다. 이는 유형 검사 및 변환을 위해 dynamic 유형이나 is 연산자를 사용하는 등 사례별로 처리해야 합니다.

위 내용은 C# 목록에 유형 매개변수가 다른 여러 일반 클래스 인스턴스가 포함될 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿