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)

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top