gpt4 book ai didi

c# - 在 C# 中同时具有特定参数和参数方法重载的好处

转载 作者:行者123 更新时间:2023-11-30 16:10:29 26 4
gpt4 key购买 nike

在 .NET 框架中有许多示例,其中有多个重载方法,其中一些使用特定数量的参数,然后是最终的“全部捕获”,其中 params使用关键字。这方面的常见示例在 String 类中,例如:

我想知道为什么有这么多方法重载是不是有什么特别的原因?起初我认为这可能与性能有关;这个 SO 问题的问题和答案 - Cost of using params in C# - 会这样建议。

但是,我开始使用 Reference Source 深入研究 .NET 源代码网站。我在 String class source code 中注意到了这一点:

String.Concat() 实际上会根据使用的固定参数数量运行不同的代码 - 在我看来,这绝对是一种优化。 String.Format() 然而,它似乎只是围绕主要的 param 方法提供包装器 - 请参阅下面的解释代码:

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...
}

那么这是否有性能优势,或者这仅仅是为了方便,还是两者兼而有之?在上面的特殊情况下,我没有看到任何明显的好处,它似乎只是在重复工作。

最佳答案

它允许您为调用该方法的每个签名创建委托(delegate):

Func<string, object, object> foo = string.Format;

这不适用于 params方法;您只能将该重载分配给 Func<string, object[]>或专门提供 params 的代表在其签名中。您将被迫创建一个新方法,该方法仅调用 params 重载来创建示例中使用的签名委托(delegate)(可能通过使用 lambda)。

关于c# - 在 C# 中同时具有特定参数和参数方法重载的好处,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25689475/

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