在VB.NET中,哪个更好用:函数重载还是默认参数?
3 回答
如果参数是可选的(即重载是完整过程签名接受的参数的子集),那么默认或可选参数会更有意义。
如果重载允许参数使用不同的类型,或者是语义不同的参数,例程会以不同的方式解释,那么重载会更有意义。
代码会被其他语言使用吗?如果是这样,这会使平衡转向超载,同时仍然牢记哈米什的答案。特别是,C# 不支持可选参数 - 但...
诚然,这实际上并不会阻止某人使用您的 C# 代码,这对他们来说可能是一种痛苦。
如果有很多参数并且它们在逻辑上代表某些东西,您可能需要考虑将它们封装在一起,就像Process
使用ProcessStartInfo
. 由于对象初始化器,这在 C# 中特别好。
如果这是用于构造,您也可以将构建器模式视为它的变体。例如,在协议缓冲区中,我可以执行以下操作:
Person jon = new Person.Builder { Name="Jon", Age=32,
Spouse="Holly", Kids=3 }.Build();
它最终变得非常易读,同时仍然一口气创建了一个人(在一个表达式中,并且不必改变人本身 - 实际上消息类型是不可变的;只有构建器不是)。
供参考
如果要将参数添加到从其他程序集调用的函数或方法,则:
您可以通过使用额外参数创建附加函数来重载。
或者您可以添加一个可选参数,但是:您必须重新编译所有调用此函数的程序集,即使它们不需要使用新的可选参数!这通常不是人们所期望的(尤其是那些习惯于 VB6 工作方式的人)。基本上,您不能将新的可选参数滑入函数并期望它完全向后兼容。另外,据我了解,如果您更改默认值,则需要重建所有调用程序集才能使更改生效。