gpt4 book ai didi

c# - Console.WriteLine() 和需要这么多参数重载?

转载 作者:IT王子 更新时间:2023-10-29 03:37:53 25 4
gpt4 key购买 nike

我在浏览文档时注意到 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);

这似乎是多余的。在第一个重载之上的其他四个重载需要什么?第一种方法能够做其他方法能做的一切。他们是否试图通过提供额外的重载来解决性能问题,这些重载最多可处理四个参数(最后一个)?通过最多包含四个参数的数组的开销是否足以满足这些重载的需要?

最佳答案

一般来说,第一个重载足以满足其他重载的说法是正确的。严格来说这并不正确,因为 params 关键字不能用于方法组绑定(bind)等间接情况。例如

delegate void E(string format, object o1);
E e = Console.WriteLine;

params 重载不会满足这种情况,它只会在存在此特定重载时起作用

public static void WriteLine(string format, object arg0);

虽然这是一个非常深奥的案例。比较重要的原因有以下几点

  1. 并非所有 CLI 语言都需要支持 params 关键字。通过消除为简单的 WriteLine 调用手动创建数组的需要,重载减轻了这些语言的负担
  2. 表现。调用 params 重载会强制调用者分配一个数组,即使它是由编译器隐式完成的。 .Net 中的分配很便宜,但不是免费的。像这样的小事情加起来很快,尤其是在 Console.WriteLine 等常用调用方法上。让其他重载允许常见情况避免这种分配

关于c# - Console.WriteLine() 和需要这么多参数重载?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22242474/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com