리플렉션을 사용하여 일반 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
의 인스턴스를 동적으로 생성하는 것입니다.
다음 단계에 따라 해결 방법을 찾을 수 있습니다.
Task<T>
)을 가져옵니다. new Type[] { typeof(Item) }
). Type.MakeGenericType
또는 TaskA
)을 생성하려면 TaskB
을 사용하세요. 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!