> 백엔드 개발 > C++ > 리플렉션을 사용하여 동적 형식 사양이 포함된 일반 C# 개체를 어떻게 만들 수 있나요?

리플렉션을 사용하여 동적 형식 사양이 포함된 일반 C# 개체를 어떻게 만들 수 있나요?

Mary-Kate Olsen
풀어 주다: 2025-01-22 09:41:08
원래의
949명이 탐색했습니다.

How Can I Create Generic C# Objects with Dynamic Type Specification Using Reflection?

리플렉션을 사용하여 동적 유형 사양으로 C# 일반 객체 생성

C#에서는 유형 T를 미리 알 수 없는 Task 클래스의 인스턴스와 같은 일반 개체를 동적으로 생성해야 할 수도 있습니다. 이 문제를 해결하려면 C# 리플렉션과 함께 Activator.CreateInstance 메서드를 사용할 수 있습니다.

일반 TaskA 또는 TaskB 개체를 동적으로 생성하려면 다음 단계를 따르세요.

  1. 일반 클래스 유형 결정: Type.GetType()을 사용하여 "namespace.TaskA" 또는 "namespace.TaskB"와 같은 일반 클래스의 유형 정보를 가져옵니다.
  2. 일반 유형 매개변수 지정: typeof(Item)와 같은 일반 클래스의 유형 매개변수를 결정합니다.
  3. 일반 유형 만들기: MakeGenericType을 사용하여 일반 클래스 유형에 특정 일반 유형을 만듭니다(예: makeme = d1.MakeGenericType(typeArgs)).
  4. 인스턴스 생성: 동적으로 생성된 일반 유형의 인스턴스를 생성하려면 Activator.CreateInstance를 사용합니다(예: object o = Activator.CreateInstance(makeme)).

예:

<code class="language-csharp">Type d1 = Type.GetType("namespace.TaskA`1");
Type[] typeArgs = { typeof(Item) };
var makeme = d1.MakeGenericType(typeArgs);
object o = Activator.CreateInstance(makeme);</code>
로그인 후 복사

일반 클래스가 여러 유형 매개변수를 허용하는 경우 유형 이름을 생략할 때 쉼표를 포함해야 합니다. 예:

<code class="language-csharp">Type type = typeof(IReadOnlyDictionary<,>); </code>
로그인 후 복사

참고: 코드 예제에서는 "namespace.TaskA1" 和Item是已定义的类型。 实际应用中,需要根据您的具体项目替换这些占位符。 此外,错误处理(例如,处理Type.GetType()`이 null을 반환함)이 프로덕션 환경에서 중요하다고 가정합니다.

위 내용은 리플렉션을 사용하여 동적 형식 사양이 포함된 일반 C# 개체를 어떻게 만들 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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