Domanda

Nel seguente esempio posso creare un oggetto dinamicamente tramite una stringa; tuttavia, non ho modo di ottenere i metodi pubblici della classe base. non posso lanciare obj ad una base, perché io non so cosa generico verrà utilizzato in fase di progettazione. eventuali suggestings in tal modo in fase di esecuzione sarebbe bello.

Progetto A contiene Classe A {T, J>: BASE {T, J>
Progetto B contiene Classe B {T, J>: BASE {T, J>

Progetto C contiene classe base {T, J>
          controllo virtuale pubblica {T, J> oggetto


progetto Windows Form evento cmdGo_Click

stringa dll = TextBox1.Text // ex
"ProjectA.dll" classe string = textbox2.text // ex "A`2 [enuT, enuJ]"
object obj = activator.createinstancefrom (dll, classe)

È stato utile?

Soluzione

Al runtime la parte generici dell'equazione non importa, perché il compilatore ha già riempito le lacune per l'implementazione generica. Io credo che si possa utilizzare la reflection per ottenere i metodi della classe base, come in questo esempio qui di seguito, spero che questo aiuta.

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

Altri suggerimenti

Questo codice crea un'istanza di BASE :

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

Se non si conoscono i parametri di tipo utilizzato in fase di esecuzione, quindi non è possibile utilizzare tutte le operazioni che dipendono da questi tipi di entrambi, quindi ... perché non fare una classe base non generico a BASE che contiene tutte le operazioni che non dipendono dai parametri generici, allora si può tra maiuscole obj a quel tipo di base e utilizzarlo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top