> 백엔드 개발 > C++ > 리플렉션을 사용하여 일반 C# 개체를 동적으로 생성하려면 어떻게 해야 합니까?

리플렉션을 사용하여 일반 C# 개체를 동적으로 생성하려면 어떻게 해야 합니까?

Barbara Streisand
풀어 주다: 2025-01-22 09:47:09
원래의
455명이 탐색했습니다.

How Can I Dynamically Create Generic C# Objects Using Reflection?

리플렉션을 사용하여 일반 C# 개체를 동적으로 생성

C# 개발에서는 일반 개체를 동적으로 생성해야 하는 경우가 많습니다. 유형 정보를 항상 사용할 수 있는 것은 아니기 때문에 이로 인해 문제가 발생합니다. 이 글에서는 리플렉션과 Activator.CreateInstance 메서드를 사용하여 이 문제를 해결하는 방법을 살펴보겠습니다.

다음과 같은 클래스가 있다고 가정해 보겠습니다.

public class Item { }

public class Task<T> { }

public class TaskA<T> : Task<T> { }

public class TaskB<T> : Task<T> { }
로그인 후 복사

우리의 목표는 정규화된 유형 이름(예: "namespace.TaskA" 또는 "namespace.TaskB")을 나타내는 문자열을 기반으로 TaskA 또는 TaskB의 인스턴스를 동적으로 생성하는 것입니다.

다음 단계에 따라 해결 방법을 찾을 수 있습니다.

  1. 기본 유형(Task<T>)을 가져옵니다.
  2. 배열로 제공될 유형 매개변수를 정의합니다(예: new Type[] { typeof(Item) }).
  3. 특정 유형(Type.MakeGenericType 또는 TaskA)을 생성하려면 TaskB을 사용하세요.
  4. 일반 객체를 인스턴스화하려면 Activator.CreateInstance을 사용하세요.

예를 들어 리플렉션을 사용하여 TaskA<Item> 개체를 만듭니다.

var taskType = typeof(Task);
Type[] typeArgs = { typeof(Item) };
var makeme = taskType.MakeGenericType(typeArgs);
object o = Activator.CreateInstance(makeme);
로그인 후 복사

타입 이름을 문자열로 지정하는 경우 다음 방법을 사용할 수 있습니다.

var taskType = Type.GetType("namespace.TaskA`1"); //注意`1`表示泛型参数个数
Type[] typeArgs = { typeof(Item) };
var makeme = taskType.MakeGenericType(typeArgs);
object o = Activator.CreateInstance(makeme);
로그인 후 복사

이 기술을 사용하면 유형 이름을 기반으로 일반 객체를 동적으로 인스턴스화할 수 있어 런타임 시 알 수 없는 일반 유형을 처리하기 위한 유연하고 강력한 솔루션을 제공합니다. Type.GetType 메서드에는 완전한 네임스페이스 정보가 필요하며 TaskA 뒤의 1은 일반 클래스에 유형 매개변수가 있음을 나타냅니다.

위 내용은 리플렉션을 사용하여 일반 C# 개체를 동적으로 생성하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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