使用可选参数进行向后兼容是一个好主意吗?

时间:2011-09-22 14:17:12

标签: c#-4.0 backwards-compatibility optional-parameters

我想知道通过使用可选参数提供向后兼容性。

在我的程序中,我有一个带有函数的接口,该函数在整个程序中以及在很多单元测试中使用。对于某些新功能,必须将布尔值传递给此函数,如果设置为false,则会改变其行为。如果您传入true,您将获得与以前相同的行为。

现在我必须在我当前代码中的任何地方传递true,之前我已调用此函数。这就是为什么我在想:“好吧我只是把true作为布尔值的默认值。然后我只需要在我需要新行为的几个新地方传入false。”

然而,我觉得,我以这种方式制作界面的动机是不得不做更少的编码现在。通常情况下,这是我能想到的唯一动机,这是一个捷径,可能会在以后咬我。我想不出以后会引起问题的任何事情,这就是我在这里发布这个问题的原因。

除了我上面描述的情况之外,一般来说,为了向后兼容性(例如在第三方使用的接口中)使新参数可选是一个好主意吗?

提前致谢。

1 个答案:

答案 0 :(得分:5)

我反对的理由是可选参数默认值仅在编译时使用(使用dynamic关键字时除外)。

因此,如果您的第三方尝试使用新版本而不重新编译其代码(例如将您的库标记为nuget中的依赖项),那么它将不兼容,因为签名具有额外的参数。

相关问题