构造函数中使用命名/可选参数会有性能惩罚吗?

7

那么会:

public Car(string color = "red", topSpeed = 180)
{
  carColor = color;
  carTopSpeed = topSpeed;
}

比起构造函数链接来获取carColor和carTopSpeed的值,这种方法是更快还是更慢? 我知道在桌面环境下,性能几乎总是可以忽略不计的,但:
对于移动游戏开发,每一个小细节都会影响性能,所以我想了解一下。
提前感谢!

https://dev59.com/hHM_5IYBdhLWcg3w02v8 - Ofiris
1
@Ofiris:不完全相同。这个问题涉及到命名/选项,而那个问题是关于初始化程序与构造函数的。 - Baldrick
你是正确的,我有一点困惑。 - Ofiris
请不要在问题标题中包含有关所使用编程语言的信息,除非没有它就没有意义。标签可以起到这个作用。 - Ondrej Janacek
啊,抱歉!@OndrejJanacek - Kites
2个回答

7

没有性能惩罚。

实际上,在运行时不存在可选参数。它们是编译器的一个技巧,即编译器放入了完整的参数集。

甚至有一个明确的警告不要使用它们(我完全不同意这个警告),因为如果您更改默认值,则旧的已编译代码不会使用新值。

【翻译】重载或可选参数之间的性能差异?

与该问题完全相同。


1
没有任何性能惩罚。当编译器识别到您正在使用具有默认参数的构造函数时,它会自动将这些值插入到编译后的代码中。
调用var car = new Car()的编译方式与您以以下方式调用它完全相同:
var car = new Car("red", 180);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接