> 백엔드 개발 > C++ > 리플렉션을 사용하여 일반 C# 개체를 동적으로 생성하는 방법은 무엇입니까?

리플렉션을 사용하여 일반 C# 개체를 동적으로 생성하는 방법은 무엇입니까?

DDD
풀어 주다: 2025-01-22 09:27:10
원래의
197명이 탐색했습니다.

How to Dynamically Create Generic C# Objects Using Reflection?

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

C# 개발에서는 일반 클래스의 인스턴스를 동적으로 생성해야 하는 경우가 많습니다. 이는 반성을 통해 달성될 수 있습니다. 일반적인 애플리케이션 시나리오는 일반 클래스의 유형이 런타임 이전에 알려지지 않고 정규화된 이름을 나타내는 문자열을 기반으로 생성되어야 한다는 것입니다.

리플렉션을 사용하여 일반 클래스를 동적으로 생성하려면 Activator.CreateInstance 메서드를 사용해야 합니다.

<code class="language-csharp">using System;
using System.Reflection;

public class MainClass
{
    public static void Main(string[] args)
    {
        // 获取泛型类型定义
        Type genericType = typeof(Task<>);

        // 构建泛型类型的类型参数
        Type[] typeArgs = { typeof(Item) };

        // 创建具体的泛型类型
        Type specificType = genericType.MakeGenericType(typeArgs);

        // 创建具体类型的实例
        object instance = Activator.CreateInstance(specificType);
    }
}


public class Item { }

public class Task<T> { }

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

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

위의 예제 코드는 Task<Item>의 인스턴스를 동적으로 빌드합니다. 런타임 시 대상 유형을 알 수 없는 경우 유형의 정규화된 이름(문자열)을 전달하여 동적으로 빌드할 수 있습니다.

<code class="language-csharp">// 使用字符串表示获取类型
Type specificType = Type.GetType("namespace.TaskA`1"); // 注意 `1` 表示泛型参数个数

// 传递类型参数并创建实例
Type[] typeArgs = { typeof(Item) };
object instance = Activator.CreateInstance(specificType.MakeGenericType(typeArgs));</code>
로그인 후 복사

이 방법을 사용하면 개발자는 컴파일 타임에 특정 유형을 알지 못해도 일반 클래스의 인스턴스를 동적으로 생성할 수 있습니다. 이는 구성 파일이나 데이터 기반 프로그래밍에서 유형을 유추하는 등의 시나리오에서 특히 유용합니다.

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

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