2010-06-18 3 views
1

Supposons que vous ayez une fonction d'horodatage, puis que vous vouliez créer une nouvelle fonction pour combiner votre horodatage et Console.WriteLine(), par ex.Ajout d'un wrapper à une fonction surchargée

public static void Write(string msg) 
    { 
     WriteTimeStamp(); 
     Console.WriteLine(msg); 
    } 

Mais la méthode WriteLine() a 18 ou si les surcharges, qui ne seront pas reflétées dans la signature de la fonction enveloppe. Comment voulez-vous que le wrapper prenne les non-chaînes et les passe à WriteLine()?

Répondre

2

En C# 4.0, vous pouvez utiliser une variable dynamique (voir this blog post):

public static void Write(object msg) 
{ 
    WriteTimeStamp(); 
    dynamic dynMsg = msg; 
    Console.WriteLine(dynMsg); 
} 
+0

Depuis cela me permet aussi utiliser les paramètres par défaut, j'aime vraiment cette solution. – Cev

5

Vous pouvez le mot-clé params, ou bien je pourrais être mal compris votre question:

public static void Write(string msg, params object[] args) 
{ 
    WriteTimeStamp(); 
    Console.WriteLine(msg, args); 
} 

Cela vous permet de spécifier 0 ou plusieurs arguments supplémentaires de tout type, et la surcharge Console.WriteLine(string, params object[]) sera appelée que joli beaucoup gère tous les autres.

Questions connexes