Добавление необязательного параметра в ClassLibrary не обеспечивает совместимость с BackWord

Я добавляю необязательный параметр в My ClassLibrary

Пример

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

И моя страница ASPX вызывает метод

GetData(string name, string surname)

Я только что перестроил ClassLibrary, а не страницу ASP. Затем он выдал ошибку Метод не найден

Помогите пожалуйста, как сохранить обратную совместимость? означает, что если я заменю только библиотеку классов, это не должно повлиять на мою страницу ASP. Я использую .NET версии 4

Спасибо


person Akshay    schedule 12.09.2016    source источник
comment
Создайте перегрузку с дополнительным параметром, а не с необязательным параметром.   -  person Joe    schedule 12.09.2016
comment
На этот вопрос есть ответ, ПОЧЕМУ это не работает: ?rq=1" title="использует необязательные параметры для обратной совместимости - хорошая идея"> stackoverflow.com/questions/7516256/   -  person AsheraH    schedule 12.09.2016
comment
@AsheraH: я прочитал комментарий выше, но не понял, почему это создает проблему и как ее преодолеть.   -  person Akshay    schedule 12.09.2016


Ответы (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 необязательным, но в этом нет особого смысла, так как любые вызывающие объекты, не предоставляющие аргумент, в конечном итоге будут вызывать версию с двумя параметрами. Если бы вы добавляли более одного параметра, это имело бы больше смысла.

Возможно, вы захотите подумать, сможете ли вы жить с «восстановлением совместимости», то есть «все в порядке, если я перестрою». Строгая обратная совместимость может быть очень ограничительной — в наши дни просто добавить новый двоичный файл в собранное приложение относительно редко по сравнению с выбором новой версии пакета при сборке.

person Jon Skeet    schedule 12.09.2016