문제

다음 예에서는 문자열을 통해 동적으로 객체를 만들 수 있습니다. 그러나 나는 기본 수업의 공개 방법을 얻을 방법이 없습니다. 디자인 시간에 어떤 제네릭이 사용될 지 모르기 때문에 OBJ를 기지에 캐스트 할 수 없습니다. 런타임에 그렇게하는 제안은 좋을 것입니다.

프로젝트 A는 클래스 A {t, j> : base {t, j>를 포함합니다.
프로젝트 B에는 클래스 B {t, j> : base {t, j>가 포함됩니다.

프로젝트 C에는 클래스 기반 {t, j>가 포함됩니다.
공개 가상 제어 {t, j> 항목

프로젝트 Windows 양식
CMDGO_CLICK 이벤트

문자열 dll = textbox1.text // ex "projecta.dll"
문자열 class = textbox2.text // ex "a`2 [enut, enuj]
Object obj = activer.createinstancefrom (dll, class)

도움이 되었습니까?

해결책

~에 실행 시간 컴파일러가 이미 제네릭 구현의 간격을 채웠 기 때문에 방정식의 제네릭 부분은 중요하지 않습니다. 아래의 예에서와 같이 기본 클래스 방법을 얻기 위해 반사를 사용할 수 있다고 생각합니다. 이것이 도움이되기를 바랍니다.

MethodInfo[] baseMethods = obj.GetType().BaseType.GetMethods();
object retObj = baseMethods[0].Invoke(obj, new object[] {"paramVal1", 3, "paramVal3"});

다른 팁

이 코드는 기본 인스턴스를 만듭니다u003Cint, string> :

Type type = typeof(BASE<,>).MakeGenericType(typeof(int), typeof(string));
object instance = Activator.CreateInstance(type);

런타임에 사용되는 유형 매개 변수를 모르는 경우 이러한 유형에 의존하는 작업을 사용할 수 없으므로 ... 비 게 릭 기본 클래스를 BASE 여기에는 일반 매개 변수에 의존하지 않는 모든 작업이 포함되어 있으면 obj 그 기본 유형에 사용하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top