如果参数是可选的(即重载是完整过程签名所接受的参数的子集),则默认或可选参数将更有意义.
如果重载允许参数使用不同的类型,或者是一个语义上不同的参数,那么例程将对其进行不同的解释,那么重载会更有意义.
该代码会被其他语言使用吗?如果是这样,那么平衡就会向过载倾斜,同时仍然牢记哈米什的答案。特别是,C# 还不支持可选参数 - 但......
诚然,这实际上并不会阻止某人使用您的 C# 代码,只是可能会让他们感到痛苦。
如果有很多参数并且它们在逻辑上代表某些内容,您可能需要考虑将它们封装在一起,就像Process使用ProcessStartInfo. 由于对象初始值设定项,这在 C# 中尤其好。
如果这是为了构建,您也可以将构建器模式视为其变体。例如,在协议缓冲区中我可以执行以下操作:
Person jon = new Person.Builder { Name="Jon", Age=32,
Spouse="Holly", Kids=3 }.Build();
Run Code Online (Sandbox Code Playgroud)
它最终变得非常可读,同时仍然一次性创建一个人(在一个表达式中,并且不必改变人本身 - 事实上,消息类型是不可变的;只有构建器不是)。