假设我有以下方法:
Public Sub Foo(ByVal x As Integer, ByVal y As Integer)
{
...
}
以下几行之间的表现是否存在差异?
Foo(1,2)
Foo(x:=1, y:=2)
Foo(y:=2, x:=1)
答案 0 :(得分:1)
执行:否
编译:是 - 微小的退化,不重要
写:是
阅读:是的 - 清晰度得到改善
<强>理由强>
写 - 很明显,
执行 - :=是一个编译器指令,因此编译后会得到相同的代码,
Benchmark, 1,000,000 iterations Repeat 1,000
Index took - Average: 5.009ms Min: 5ms Max: 8ms
Named took - Average: 5.008ms Min: 5ms Max: 7ms
That is, no difference.
编译 - 命名参数导致查找构造函数,而不是简单的索引。查找需要更多周期。
HOWEVER ,如果你有一系列可选的参数,它会更有用
Public Sub SetSomething(A as integer, B as integer, _
Optional C as integer = 0, _
Optional D as integer = 0, _
Optional E as integer = 0, _
Optional F as integer = 0, _
Optional G as integer = 0, _
Optional H as integer = 0)
SetSomething(X:=1,Y:=2, H:=42)
阅读
在以后读取代码时使用命名参数会有一些好处,特别是如果参数名称有意义的话。
例如,以下行不仅清楚传递的内容以及文本框应包含的内容,而且还可以很好地猜测函数的作用。
Net = Calculate(Quantity:= Double.Parse(TextBox1.Text),
CostPerItem:= Double.Parse(TextBox2.Text),
TaxRate:= Double.Parse(TextBox3.Text))
在哪里,这不会告诉你什么
Net = Calculate(Double.Parse(TextBox1.Text), Double.Parse(TextBox2.Text), Double.Parse(TextBox3.Text))
对于更长的参数列表,此优势会更有帮助,尤其是一些具有多个参数的本机方法,以后您将不会记得。
这是我自己的代码中的另一个例子。
Private Sub Refresh_Searches(ByVal DoCompressor As Boolean, ByVal DoEvaporator As Boolean, ByVal DoCondenser As Boolean, ByVal StartOver As Boolean)
显然我可以通过编写
来调用它Refresh_Searches(False, True, False, False)
但是当我六个月后回来,或者在我的情况下...... 6分钟,它没有使用鼠标就是胡言乱语。下面的内容要好得多,即使写入时间要长得多。
Refresh_Searches(DoCompressor:=False, _
DoCondenser:=True, _
DoEvaporator:=False, _
StartOver:=False)