2008-12-30 9 views
5

Est-ce que quelqu'un connaît un moyen d'appeler une méthode générique d'une classe de base avec CodeDom?CodeDom - Appeler une méthode générique

Je n'ai aucun problème à appeler une méthode standard, mais je ne trouve pas de solution pour appeler le générique.

Le code que j'utilise pour appeler la méthode standard de classe de base GetInstance:

CodeAssignStatement assignStatement = new CodeAssignStatement(
    new CodeVariableReferenceExpression("instance"), 
    new CodeMethodInvokeExpression(
     new CodeThisReferenceExpression(), 
     "GetInstance", 
     new CodeExpression[] { new CodeVariableReferenceExpression("instance") } 
    )); 

Répondre

11

Vous pouvez trouver votre réponse here à msdn:

défiler vers le bas à l'exemple C# (CodeDomGenericsDemo).

Une méthode générique est générée:

public virtual void Print<S, T>() 
      where S : new() 
     { 
      Console.WriteLine(default(T)); 
      Console.WriteLine(default(S)); 
     } 

et exécuté plus tard dans l'exemple:

dict.Print<decimal, int>(); 

Le code pour générer l'appel à la méthode:

methodMain.Statements.Add(new CodeExpressionStatement(
       new CodeMethodInvokeExpression(
         new CodeMethodReferenceExpression(
         new CodeVariableReferenceExpression("dict"), 
          "Print", 
           new CodeTypeReference[] { 
            new CodeTypeReference("System.Decimal"), 
             new CodeTypeReference("System.Int32"),}), 
              new CodeExpression[0]))); 

(Vous utiliserait CodeThisReferenceExpression() ou CodeBaseReferenceExpression() au lieu de CodeVariableReferenceExpression), n Ne sachez pas si c'est ce que vous voulez dire en appelant la méthode de la classe de base standard.

Questions connexes