Pergunta

No exemplo a seguir eu posso criar um objeto dinamicamente através de uma corda; No entanto, eu não tenho nenhuma maneira de obter os métodos públicos de classe base. i não pode lançar obj a uma base, porque eu não sei o genérico será usado em tempo de design. nenhum suggestings em fazê-lo em tempo de execução seria bom.

Projeto A contém Classe A {T, J>: BASE {T, J>
Projeto B contém Classe B {T, J>: BASE {T, J>

Project C contém classe base {T, J>
controle virtual público {T, J> item

Project Windows Form
evento cmdGo_Click

string dll = TextBox1.Text // ex "ProjectA.dll"
classe string = textbox2.text // ex "A`2 [enuT, enuJ]"
objeto obj = Activator.CreateInstanceFrom (dll, classe)

Foi útil?

Solução

No tempo de execução a parte genéricos da equação não importa, porque o compilador já preencheu as lacunas para a execução genérico. Eu acredito que você pode usar a reflexão para obter os métodos de classe base, como neste exemplo abaixo, eu espero que isso ajude.

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

Outras dicas

Este código cria uma instância de BASE :

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

Se você não sabe os parâmetros de tipo usados ??em tempo de execução, então você não pode usar quaisquer operações que dependem desses tipos ou, então ... por que não fazer uma classe base não-genérico para BASE que contém todas as operações que não dependem dos parâmetros genéricos, então você pode maiúsculas obj a esse tipo de base e usá-lo.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top