2009-05-30 3 views
0

В следующем примере я могу динамически создать объект с помощью строки; однако у меня нет способа получить доступ к общедоступным методам класса BASE. я не могу использовать obj для BASE, потому что я не знаю, какой generic будет использоваться во время разработки. любые предложения по этому поводу во время выполнения были бы приятными.C# Создание объектов с помощью Generics во время выполнения

Проект А содержит класс А {Т, J>: основание {T, J>
Проект B содержит класс B {T, J>: БАЗА {Т, J>

Проект C содержит базовый класс { T, J>
общественных виртуальный контроль {T, J> пункт

Проект Windows Form
cmdGo_Click событие

длл строки = TextBox1.Text // бывший "ProjectA.dll"
строки класса = TextBox2 .text // бывший «A`2 [ENUT, enuJ]»
объект OBJ = activator.createinstancefrom (DLL, класс)

ответ

0

В время выполнения часть генериков уравнения не имеет значения, поскольку компилятор уже заполнил пробелы для общей реализации. Я считаю, что вы можете использовать отражение, чтобы получить методы базового класса, как в этом примере ниже, я надеюсь, что это поможет.

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

Если вы не знаете параметры типа, используемые во время выполнения, то вы не можете использовать любые операции, которые также зависят от этих типов, поэтому ... почему бы не сделать базовый класс не общего для BASE, который содержит все операции, которые не зависят от общих параметров, тогда вы можете использовать этот тип obj и использовать его ,

+0

я знаю параметры во время выполнения, как они изложены в текстовом поле A'2 [ENUT, enuJ]. к сожалению, мой общественный контроль {T, J> является обязательным. Думаю, мне может быть не повезло. Спасибо за вашу помощь – alpha

5

Этот код создает экземпляр БАЗА < междунар, струнный >:

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

Проблема с этим - вы знаете дженерики во время разработки (typeof (int), typeof (string), у меня нет этой роскоши. – alpha

Смежные вопросы