이 C# 코드 스 니펫은 인스턴스형 유형을 제네릭의 유형 매개 변수로 사용하여 컴파일러에서 직접 지원하지 않는 작업을 탐색합니다. 이 기사는 일반 유형 매개 변수로 직접 <p> 변수를 직접 사용하려고 시도하면 컴파일러 오류가 발생합니다.
<ed> 제시된 솔루션은 반사의 <code>Type
메소드를 활용합니다. 이 방법은 일반 유형 정의를 기반으로 새로운 유형을 동적으로 생성하고 유형 인수를 제공합니다. 그런 다음 myType
메소드는 새로 생성 된이 유형의 객체를 인스턴스화합니다.
MakeGenericType
예제 출력 : Activator.CreateInstance
반사 기반 예제의 콘솔 출력을 보여주는 것은 런타임 유형으로 일반 클래스를 성공적으로 인스턴스화한다는 이해를 강화할 것입니다.
성능 고려 사항 :
대안 접근법 (해당되는 경우) : 특정 상황에서 적합한 반사에 대한 대안이있는 경우 (예 : 인터페이스 또는 기본 클래스 사용), 간단히 언급하는 것이 유익합니다. MakeGenericType
Type.GetType
여기서 null
는 다음과 같이 정의됩니다
<code class="language-csharp">string typeName = "System.String"; // Or read from somewhere Type myType = Type.GetType(typeName); MyGenericClass<myType> myGenericClass = new MyGenericClass<myType>(); // Compiler error!</code>이 코드는 먼저
가 유효한 유형을 반환했는지 확인합니다. 그런 다음 를 사용하여 특정 일반 유형 ()을 만들고 인스턴스를 만듭니다. 콘솔 출력은 성공적인 인스턴스화를 확인합니다
Type.GetType
다중 유형 매개 변수 처리 MakeGenericType
Generic<string>
여러 유형 매개 변수가있는 일반 클래스의 경우 쉼표로 구분 된 목록으로 Activator.CreateInstance
에 유형 인수를 제공합니다.
성능 :
반사는 직접 일반 인스턴스화보다 상당히 느립니다. 컴파일 시간에 유형이 알려지지 않은 경우에만이 접근법을 사용하십시오.
오류 처리 : MakeGenericType
항상 예외를 방지하려면 항상
<code class="language-csharp">public class MyGenericClass<T> { }</code>이 개선 된 버전은 오류 처리 및 성능 영향에 대한 중요한 세부 사항을 포함하여 솔루션에 대한보다 완전하고 강력한 설명을 제공합니다.
를 이미지의 실제 경로로 바꾸는 것을 잊지 마십시오.
위 내용은 C# 제네릭에서 유형 매개 변수로 인스턴스화 된 유형을 전달할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!