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

1004

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

Chris Ballance
источник
Вот видео на YouTube, которое объясняет все 3 варианта атрибута «Устаревший»: youtube.com/watch?v=_AQ5wsPnfJ4
Shivprasad Koirala
3
Не забывайте, что есть также [EditorBrowsable(EditorBrowsableState.Never)]( stackoverflow.com/a/9086345/661933 ). Служит немного другой цели.
Nawfal

Ответы:

1596

Кратчайший путь является путем добавления в ObsoleteAttributeкачестве атрибута к методу . Не забудьте включить соответствующее объяснение:

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

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

[Obsolete("Method1 is deprecated, please use Method2 instead.", true)]
тыкают
источник
98
если вы хотите, чтобы компилятор выдавал ошибку, если кто-то использует метод, используйте перегруженный метод Obsolete (String Message, Bool error)
HitLikeAHammer
141
Устаревшее без описания должно быть устаревшим ... notherdev.blogspot.com/2013/02/obsolete-should-be-obsolete.html
dotjoe
31
В ваших примерах часть «Method1 устарела» довольно избыточна. Помечая это как устаревшее, вы говорите, что оно действительно устарело, поэтому нет необходимости повторять его в сообщении. Тем более, что в результате предупреждения / ошибки будет отображаться «Метод1», он устарел: «Метод 1 устарел, вместо этого используйте Метод2».
нереально
8
Хорошо. Я просто разместил здесь пример текста, чтобы показать, что вы можете добавить более конкретное сообщение, если хотите.
Крис Балланс
14
@ akshay2000 Переименование или удаление метода оставит потребителя в неведении о том, почему он был переименован или удален и что следует использовать вместо этого.
Lensflare
136

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

[Obsolete]
private static void SomeMethod()

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

Показано устаревшее предупреждение

И с IntelliSense:

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

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

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

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

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

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

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

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

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

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

mark_h
источник
66

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

[System.Obsolete("use myMethodB instead")]
void myMethodA()
FTWinston
источник
36

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

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

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

Сина Лотфи
источник