C#4.0通过在方法中允许使用默认参数,引入了一个非常有趣的东西。但是C#3.0没有。因此,如果要模拟“默认参数”,则必须创建该方法的两个,一个带有这些参数,另一个不带有这些参数。我有两种方法可以做到这一点。
版本A-调用其他方法
public string CutBetween(string str, string left, string right, bool inclusive)
{
return str.CutAfter(left, inclusive).CutBefore(right, inclusive);
}
public string CutBetween(string str, string left, string right)
{
return CutBetween(str, left, right, false);
}
版本B-复制方法主体
public string CutBetween(string str, string left, string right, bool inclusive)
{
return str.CutAfter(left, inclusive).CutBefore(right, inclusive);
}
public string CutBetween(string str, string left, string right)
{
return str.CutAfter(left, false).CutBefore(right, false);
}
两者之间有什么真正的区别?这不是关于优化或资源使用或其他任何问题的问题(尽管部分问题是我保持一致的总体目标),我什至不认为选择一种或另一种方法有任何重大影响,但是我发现了明智地问这些事情要比误以为是错误的假设。
最佳答案
唯一真正的区别是维护;第二个版本本质上是一种代码复制形式,如果您需要更改这些代码的实现,则需要做更多的工作(也许还要运行更多的测试)。
否则,它们在所有其他方面基本相同-在第一种情况下,您将在调用堆栈上拥有一个额外的方法,这不会对性能或资源使用产生任何明显的影响(如您所说,不是优化)问题)。
鉴于此,当我需要相同方法的多个重载时,我倾向于按照第一个示例中的方法进行操作-有多个重载方法都称为同一“通用”方法。
关于c# - 这些默认参数的模拟之间是否存在明显的机械差异?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2931120/