我正在浏览文档并注意到该Console.WriteLine()方法有几个重载.特别是,我的好奇心和部分混淆与这些有关:
public static void WriteLine(string format, params object[] arg);
public static void WriteLine(string format, object arg0);
public static void WriteLine(string format, object arg0, object arg1);
public static void WriteLine(string format, object arg0, object arg1, object arg2);
public static void WriteLine(string format, object arg0, object arg1, object arg2, object arg3);
这似乎是多余的.第一个超载的其他四个重载需要什么?第一种方法能够完成其他方法可以做的所有事情.是否有一个性能问题,他们试图通过提供额外的重载来处理,最多可以处理四个参数(最后一个)?通过最多四个参数的数组的开销是否足以满足这些重载的需要?
Jar*_*Par 102
一般来说,第一次重载足以满足其他重载是正确的.但这并不严格,因为params关键字不能用于方法组绑定等间接情况.例如
delegate void E(string format, object o1);
E e = Console.WriteLine;
所述params过载不会满足该情况下,它将只当这个特定的过载是本工作
public static void WriteLine(string format, object arg0);
这是一个非常深奥的案例.更重要的原因如下
params关键字.通过消除为简单的WriteLine`调用手动创建数组的需要,具有重载可以减轻这些语言的负担params重载会强制调用者分配一个数组,即使它是由编译器隐式完成的.分配在.Net中很便宜但不是免费的.像这样的小事情很快就会加起来,特别是在常见的方法上Console.WriteLine.具有其他重载允许常见情况避免这种分配