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