Як позначити метод застарілим або застарілим?


1003

Як я можу позначити метод застарілим або застарілим за допомогою C # ?


Ось відео YouTube, яке пояснює всі 3 варіанти атрибута "Застаріле": youtube.com/watch?v=_AQ5wsPnfJ4
Shivprasad Koirala

3
Не забувати є також [EditorBrowsable(EditorBrowsableState.Never)]( stackoverflow.com/a/9086345/661933 ). Служить трохи іншого призначення.
nawfal

Відповіді:


1594

Найкоротший шлях - додавання методуObsoleteAttribute як атрибута . Обов’язково додайте відповідне пояснення:

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

Ви також можете спричинити збій компіляції, трактуючи використання методу як помилку замість попередження , якщо метод викликається звідкись у коді, як це:

[Obsolete("Method1 is deprecated, please use Method2 instead.", true)]

97
якщо ви хочете, щоб компілятор видав помилку, якщо хтось використовує метод, використовуйте перевантажений метод Застаріле (String Message, Bool error)
HitLikeAHammer

140
Застарілий без опису має бути застарілим ... 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()

При використанні це те, що ви отримуєте:

Використання методу відображається як помилка

Примітка. Використовуйте повідомлення, щоб повідомити людям, що вони повинні використовувати замість цього, а не чому це застаріло.


66

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

[System.Obsolete("use myMethodB instead")]
void myMethodA()

36

За допомогою ObsoleteAttributeвас можна показати застарілий метод. Застарілий атрибут має три конструктори:

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

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.