Как отметить метод как устаревший или устаревший?

Как пометить метод как устаревший или устаревший с помощью C #?


person Community    schedule 18.11.2009    source источник
comment
Не забывайте, что есть еще [EditorBrowsable(EditorBrowsableState.Never)] (stackoverflow.com/a/9086345/661933). Служит немного другой цели.   -  person nawfal    schedule 16.03.2018


Ответы (4)


Самый короткий способ - добавить ObsoleteAttribute как атрибут метода. Обязательно включите соответствующее объяснение:

[Obsolete("Method1 is deprecated, please use Method2 instead.")]
public void Method1()
{ … }

Вы также можете вызвать сбой компиляции, рассматривая использование метода как ошибку вместо предупреждения, если метод вызывается откуда-то из кода, например:

[Obsolete("Method1 is deprecated, please use Method2 instead.", true)]
person Community    schedule 18.11.2009
comment
если вы хотите, чтобы компилятор выдавал ошибку, если кто-то использует метод, используйте перегруженный метод Obsolete (String Message, Bool error) - person HitLikeAHammer; 19.11.2009
comment
Устаревшее без описания должно быть устаревшим ... notherdev.blogspot. com / 2013/02 / obsolete-should-be-obsolete.html - person dotjoe; 22.04.2013
comment
В ваших примерах Method1 является устаревшей, часть довольно избыточна. Помечая его как устаревший, вы говорите, что он действительно устарел, поэтому нет необходимости повторять его в сообщении. Тем более, что в появившемся предупреждении / ошибке будет написано, что «Method1» устарел: «Method1 устарел, используйте вместо него Method2». - person irreal; 25.12.2015
comment
Хорошо. Я просто поместил туда пример текста, чтобы показать, что вы можете добавить более конкретное сообщение, если хотите. - person Chris Ballance; 25.12.2015
comment
@HitLikeAHammer Если мы стремимся к ошибке компилятора, то почему бы не изменить имя метода и не позволить компилятору плакать по этому поводу? В чем смысл аннотации? - person akshay2000; 29.06.2016
comment
@ akshay2000 Переименование или удаление метода оставит потребителя в неведении относительно того, почему он был переименован или удален и что следует использовать вместо этого. - person Lensflare; 07.07.2016
comment
Другая причина для принудительной ошибки компиляции устаревшего метода или свойства может быть в том, что это необходимо для чего-то, что использует отражение, но не предназначено для прямых вызовов. Пример, который у меня есть, - это свойство, которое необходимо для сериализации в конкретную базу данных, но никогда не должно использоваться кодом приложения. - person E-Riz; 17.04.2017
comment
Obsolete позволяет постепенно удалять метод, класс и т. Д. Через несколько выпусков, если хотите: предупреждение, ошибка, исчезновение. Я думаю, это лучше для потребляющего кода / кодировщика, чем просто удаление рассматриваемого элемента. - person SteveCinq; 01.08.2018
comment
Может быть хорошей практикой использовать [Obsolete("Method1 is deprecated, please use " + nameof(Method2) + " instead.")], чтобы избежать жестко запрограммированных строк, в случае, если имя метода должно измениться по какой-либо причине. - person Mladen B.; 25.01.2019

Чтобы пометить как устаревшее с предупреждением:

[Obsolete]
private static void SomeMethod()

Когда вы его используете, вы получаете предупреждение:

Отображается устаревшее предупреждение

А с IntelliSense:

Устаревшее предупреждение с IntelliSense

Если вы хотите сообщение:

[Obsolete("My message")]
private static void SomeMethod()

Вот подсказка IntelliSense:

IntelliSense показывает устаревшее сообщение

Наконец, если вы хотите, чтобы использование было отмечено как ошибка:

[Obsolete("My message", true)]
private static void SomeMethod()

При использовании вы получаете:

Использование метода отображается как ошибка

Примечание. Используйте сообщение, чтобы сообщить людям, что им следует использовать вместо этого, а не почему оно устарело.

person Community    schedule 07.10.2016

Добавьте аннотацию к методу, используя ключевое слово Obsolete. Аргумент сообщения является необязательным, но это хорошая идея, чтобы сообщить, почему элемент теперь устарел и / или что использовать вместо него.
Пример:

[System.Obsolete("use myMethodB instead")]
void myMethodA()
person Community    schedule 18.11.2009

С помощью ObsoleteAttribute вы можете пометить метод как устаревший. В нем есть три конструктора:

  1. [Obsolete]: не является конструктором параметров и используется по умолчанию с использованием этого атрибута.
  2. [Obsolete(string message)]: в этом формате вы можете message узнать, почему этот метод устарел.
  3. [Obsolete(string message, bool error)]: в этом формате сообщение очень явное, но error означает, что во время компиляции компилятор должен показывать ошибку и вызывать сбой компиляции или нет.

введите описание изображения здесь

person Community    schedule 18.06.2018