我想知道通过使用可选参数提供向后兼容性。
在我的程序中,我有一个带有函数的接口,该函数在整个程序中以及在很多单元测试中使用。对于某些新功能,必须将布尔值传递给此函数,如果设置为false
,则会改变其行为。如果您传入true
,您将获得与以前相同的行为。
现在我必须在我当前代码中的任何地方传递true
,之前我已调用此函数。这就是为什么我在想:“好吧我只是把true
作为布尔值的默认值。然后我只需要在我需要新行为的几个新地方传入false
。”
除了我上面描述的情况之外,一般来说,为了向后兼容性(例如在第三方使用的接口中)使新参数可选是一个好主意吗?
提前致谢。
答案 0 :(得分:5)
我反对的理由是可选参数默认值仅在编译时使用(使用dynamic关键字时除外)。
因此,如果您的第三方尝试使用新版本而不重新编译其代码(例如将您的库标记为nuget中的依赖项),那么它将不兼容,因为签名具有额外的参数。