【问题标题】:Adding Optional parameter in ClassLibrary Does not Provide BackWord Compatibility在类库中添加可选参数不提供向后兼容性
【发布时间】:2017-01-19 17:38:19
【问题描述】:

我在 My ClassLibrary 中添加可选参数

例子

public static string GetData(string name, string surname, bool status = false){}

我的 ASPX 页面正在调用方法

GetData(string name, string surname)

我只是重建了 ClassLibrary 而不是 ASP 页面。然后它抛出错误Method Not Found

请帮忙 如何保持向后兼容性?意味着如果我只是替换类库,那么它不应该影响我的 ASP 页面。我使用 .NET 版本 4

谢谢

【问题讨论】:

  • 使用附加参数而不是使用可选参数创建重载。
  • 这个问题有关于为什么这不起作用的答案:stackoverflow.com/questions/7516256/…
  • @AsheraH :我阅读了上述评论,但不明白为什么会出现问题以及如何克服

标签: c# asp.net backwards-compatibility class-library


【解决方案1】:

如果您真的想要二进制兼容性,那么可以,您甚至不能添加可选参数。你可以做的是添加一个重载:

之前:

public static string GetData(string name, string surname)
{
    // Real code
}

之后:

public static string GetData(string name, string surname)
{
    return GetData(name, surname, false);
}

public static string GetData(string name, string surname, bool status)
{
    // Real code
}

请注意,您可以status 设为可选,但这没什么意义,因为任何不提供参数的调用者最终都会调用双参数版本。但是,如果您要添加多个参数,那会更有意义。

您可能想考虑是否可以接受“重建兼容性”,即“如果我重建一切都好”。严格的向后兼容性可能会受到很大限制 - 现在只是将新的二进制文件放入已构建的应用程序中,与构建时选择新的包版本相比,这种情况相对较少。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多