在 .NET 框架中有许多示例,其中一个方法有多个重载,其中一些使用特定数量的参数,然后params
是使用关键字的最终“catch all”。常见的例子是在String
课堂上,例如:
我想知道为什么有这么多这些方法重载是否有特殊原因?起初我认为这可能与性能有关;这个 SO 问题的问题和答案 -在 C# 中使用参数的成本- 会建议这样做。
但是,我开始使用Reference Source网站深入研究 .NET 源代码。我在String 类源代码中注意到了这一点:
String.Concat()
实际上根据使用了多少固定参数运行不同的代码——在我看来这肯定是一种优化。String.Format()
但是似乎只是提供了 mainparam
方法的包装器 - 请参阅下面的释义代码:
public static String Format(String format, Object arg0)
{
return Format(format, new Object[] { arg0 });
}
public static String Format(String format, Object arg0, Object arg1)
{
return Format(format, new Object[] { arg0, arg1 });
}
public static String Format(String format, Object arg0, Object arg1, Object arg2)
{
return Format(format, new Object[] { arg0, arg1, arg2 });
}
public static String Format(String format, params Object[] args)
{
// Do work here...
}
那么是否有性能优势,或者这只是为了方便,或者两者兼而有之?在上面的特定情况下,我没有看到任何明显的好处,它似乎只是重复工作。