VB.NET中的函数重载与默认参数?

时间:2008-11-20 05:15:53

标签: vb.net overloading

在VB.NET中,哪个更好用:函数重载或默认参数?

3 个答案:

答案 0 :(得分:9)

如果参数是可选的(即重载是完整过程签名所接受的参数的子集),那么默认或可选参数会更有意义。

如果重载允许参数使用不同的类型,或者是一个语义上不同的参数,那么例程将对其进行不同的解释,那么重载会更有意义。

答案 1 :(得分:4)

代码是否会被其他语言使用?如果是这样的话,这会使平衡摆向过载,同时仍然记住Hamish的答案。特别是,C#不支持可选参数 - 但是......

不可否认,这实际上并不会阻止某人使用C#中的代码,这对他们来说可能是一种痛苦。

如果有很多参数并且它们在逻辑上代表某些内容,您可能需要考虑将它们封装在一起,就像ProcessProcessStartInfo一起使用的方式一样。由于对象初始化器,这在C#中特别好。

如果这是构造,您可能还会将构建器模式视为此变体。例如,在Protocol Buffers中,我可以执行以下操作:

Person jon = new Person.Builder { Name="Jon", Age=32,
                                  Spouse="Holly", Kids=3 }.Build();

最终仍然是非常可读,同时仍然一次创建一个人(在一个表达式中,而不必改变人本身 - 实际上消息类型是不可变的;它只是不是构建器)。

答案 2 :(得分:0)

FYI

如果要将参数添加到从其他程序集调用的函数或方法中,则:

您可以通过使用额外参数创建附加功能来重载。

或者您可以添加一个可选参数,但是:您必须重新编译调用此函数的所有程序集,即使它们不需要使用新的可选参数!这通常不是人们所期望的(特别是那些习惯于VB6如何工作的人)。基本上,您不能将新的可选参数放入函数中,并期望它完全向后兼容。另外,据我了解,如果更改默认值,则需要重建所有调用程序集以使更改生效。