【发布时间】:2011-06-15 15:51:38
【问题描述】:
我今天的问题:接口中的重载方法不好吗?你知道,“如果你不在乎就省略参数,我们会找出默认值”这种重载方法。 像这样:
void Add(object item);
void Add(object item, bool shouldDoSomething);
void Add(object item, bool shouldDoSomething, IUltraObscureDeviceContext context);
在这种情况下,我倾向于认为只有后者属于一个接口,而其他的应该在它之上的抽象类中实现。但话又说回来,我不确定。
此外,有时您只是希望不同的重载执行稍微不同的工作(如果不应该使用重载方法,请在此阻止我)。或者有时你不能只用空值代替某些参数,如果某些参数为空,你希望抛出异常。在这种情况下我不应该使用重载吗?
所以基本上我正在寻找一些关于接口中的重载方法与实现这些接口的抽象类中的重载方法等方面的指南。 提前致谢
【问题讨论】:
-
如果您提供的合同承诺提供此方法的 3 个版本,那么您应该包含这些重载。
-
@Kirk:六个中的一个,六个。真正的问题是它们是否应该被默认在界面中,而不是如何表达这些默认值。
-
@Kirk:因为默认参数不是什么灵丹妙药,现在意味着重载已经过时。例如,默认值必须是常量,也许重载会将变量传递给第二个或第三个重载。仅仅因为你有一个闪亮的新玩具并不意味着在任何地方都可以使用它。
-
@Stook:直截了当的估计:如果每个人都阅读规范,stackoverflow 可能会减少一半以上的服务器、磁盘和带宽。