C # Créer des objets avec Generics lors de l'exécution
Question
Dans l'exemple suivant, je peux créer un objet dynamique par l'intermédiaire d'une chaîne de caractères; Cependant, je n'ai aucun moyen d'obtenir les méthodes publiques de la classe de base. Je ne peux pas obj en une base parce que je ne sais pas ce qui sera utilisé au moment de la conception générique. tout suggestings sur le faire lors de l'exécution serait bien.
Projet A contient la classe A {T, J>: BASE {T, J>
Projet B contient la classe B {T, J>: BASE {T, J>
Projet C contient la classe de base {T, J>
contrôle virtuel public {T, J> article
Projet Windows Form
événement cmdGo_Click
dll string = TextBox1.Text // ex "ProjectA.dll"
classe string = textbox2.text // ex "A`2 [enuT, enuJ]"
objet OBJ = activator.createinstancefrom (dll, classe)
La solution
runtime la génériques partie de l'équation n'a pas d'importance, car le compilateur a déjà rempli les lacunes de la mise en œuvre générique. Je crois que vous pouvez utiliser la réflexion pour obtenir les méthodes de la classe de base, comme dans cet exemple ci-dessous, j'espère que cela aide.
MethodInfo[] baseMethods = obj.GetType().BaseType.GetMethods();
object retObj = baseMethods[0].Invoke(obj, new object[] {"paramVal1", 3, "paramVal3"});
Autres conseils
Ce code crée une instance de BASE
Type type = typeof(BASE<,>).MakeGenericType(typeof(int), typeof(string));
object instance = Activator.CreateInstance(type);
Si vous ne connaissez pas les paramètres de type utilisés au moment de l'exécution, vous ne pouvez pas utiliser toutes les opérations qui dépendent de ces types soit, alors ... pourquoi ne pas faire une classe de base non générique BASE
qui contient toutes les opérations qui ne dépendent pas des paramètres génériques, alors vous pouvez obj
de cas à ce type de base et de l'utiliser.