【问题标题】:Is using optional parameters for backwards compatibility a good idea?使用可选参数来实现向后兼容性是个好主意吗?
【发布时间】:2011-09-22 22:33:49
【问题描述】:

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

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

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

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

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

提前致谢。

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • 这是一个很好的观点。我想在这种情况下,过载会更好。但这并不意味着我的代码以后会变得有点乱。
    猜你喜欢
    • 2012-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多