2010-01-19 2 views
0

가능한 중복 :
Can I declare a variable of Type<T> without specifying T at compile time?컴파일시 T를 지정하지 않고 Type <T>의 변수를 선언 할 수 있습니까?

목표 : 클래스 "MyContent"동적으로로드합니다. 1 인터페이스 <T>, 1 추상 일반 class<T> 있습니다.

코드 :

public interface IMyObjectInterface{ 
} 
public abstract MyAbstractObject : IMyObjectInterface{ 
} 
public class MyObject : MyAbstractObject{ 
} 

public interface IMyContentInterface<T> where T : MyAbstractObject 
{ 
    T MyMethod(); 
    void MyMethod2(T); 
} 
public abstract MyAbstractContent<T>, IMyContentInterface<T> where T : MyAbstractObject 
{ 
    public abstract T MyMethod(); 
    public abstract void MyMethod2(T); 
} 
public class MyContent : MyAbstractContent<MyObject> 
{ 
    public override MyObject MyMethod() { //do something with MyObject } 
    public override void MyMethod2(MyObject) { //do something with MyObject } 
} 

지금, 우리는로드 :

IMyObjectInterface obj = (IMyObjectInterface)Assembly.Load("MyAssembly").CreateInstance("MyObject"); 
IMyContentInterface<???> content = (IMyContentInterface<???>)Assembly.Load("MyAssembly").CreateInstance("MyContent"); 
content.MyMethod(); 

어떻게로드 ???

+1

다른 질문에 대한 답변을 읽었습니까? http://stackoverflow.com/questions/2067827/can-i-declare-a-variable-of-typet-without-specifying-t-at-compile-time – Joel

+0

@Fabio - 죄송합니다. 내 원래 대답이 불투명했습니다. ,하지만 C#에서는 이것을 할 수 없습니다. 'T'를 미리 모르는 경우 멤버에게 직접 액세스 할 수 없으며 'T'를 참조하는 일반 변수를 만들 수 없습니다. –

+1

이것은 여러 번 요청되었습니다 : http://stackoverflow.com/questions/2007142/generic-class-members-in-c – JonH

답변

2

일반 메서드 또는 형식 안에있는 경우에만이를 수행 할 수 있으므로 일반 형식을 사용할 수 있습니다. 인스턴스화 시간 (런타임 일지라도)에서는 .NET이 Java처럼 지우기를 사용하지 않기 때문에 정확한 유형을 알아야합니다.

그러나 을 통해 모든 유형의 인스턴스 (MakeGenericType을 사용하는 경우 일반)를 만들고 object 변수에 지정할 수 있습니다.

가 활성화 유형을 얻으려면, 당신은 얻을 수있는이 같은 구체적인 유형 :

typeof(IMyContentInterface<>).MakeGenericType(typeToUse) 
2

이 아닌 일반적인 인터페이스의 일부로 포함하는, 당신이 가진 것 중 하나 MyMethod라는를 호출하기 위해, 또는 클래스를 호출하거나 돌아 오는 객체에 리플렉션을 사용하여 호출하십시오 (런타임시 T 유형을 얻을 수 있습니다)

관련 문제