将包装器添加到重载的函数

时间:2010-06-18 08:45:54

标签: c#

假设您有一个时间戳功能,然后想要创建一个新功能来合并您的时间戳和Console.WriteLine(),例如

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

但是WriteLine()方法有18个左右的重载,这些重载不会反映在包装函数的签名中。你如何让包装器获取非字符串并将它们传递给WriteLine()

3 个答案:

答案 0 :(得分:5)

您可能需要params关键字,或者我可能会误解您的问题:

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

这允许您指定任何类型的0个或多个附加参数,并且将调用Console.WriteLine(string, params object[])重载,它几乎可以处理所有其他参数。

答案 1 :(得分:2)

在C#4.0中,您可以使用动态变量(请参阅this blog post):

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

答案 2 :(得分:0)

使用 params 关键字作为方法参数

请参阅this MSDN link