리플렉션을 사용하여 GenericClass<T>
의 동적 인스턴스를 만드는 방법을 실제로 묻는 것입니다. 이것은 어떻게 작동 :
var genericTypeDefinition = typeof(GenericClass<>);
var concreteType = genericTypeDefinition.MakeGenericType(_type);
var instance = Activator.CreateInstance(concreteType); // Calls default constructor.
일부 instance.Method()
를 호출 할 경우 (CreateInstance
단순히 객체를 반환하기 때문에)보다 특정 유형의 인스턴스를 캐스팅해야합니다. 다음
interface ISomeInterface
{
object Method(string xml);
}
class GenericClass<T> : ISomeInterface
{
void object ISomeInterface.Method(string xml)
{
return Method(xml);
}
public T Method(string xml)
{
}
}
과 :
난 당신이 안전하게 런타임에이 인터페이스로 캐스팅하고 원하는 메소드를 호출 할 수 있도록,이 인터페이스를 구현하는이 방법을 정의하는 인터페이스를 정의하는
GenericClass<>
을 가지고 제안
var genericTypeDefinition = typeof(GenericClass<>);
var concreteType = genericTypeDefinition.MakeGenericType(_type);
var instance = (ISomeInterface) Activator.CreateInstance(concreteType); // Calls default constructor.
instance.Method("parameter");
_type을 T로 바인딩하는'MakeGenericType'을 관찰하고 구체화 된 제네릭 클래스 정의를 "유형"으로 반환합니다. 그런 다음 Activator.CreateInstance는 모든 유형과 마찬가지로 트릭을 수행합니다. – quetzalcoatl
후속 질문이 될 수도 있습니다.이 솔루션으로 해결하려는 문제는 무엇입니까? –
일반 클래스를 만드는 방법을 찾았지만 메서드를 실행하고 결과를 얻는 방법을 모르겠습니다. 결과는 클래스 생성에 사용하는 것과 동일한 유형이어야합니다. – belurd