CS0672: элемент `Foo.OnSelected()'переопределяет устаревший элемент`Baz.OnSelected()'
В моей DLL я пометил виртуальный метод как устаревший, используя System.ObsoleteAttribute
но это не производит предупреждение, которое я ожидал.
Источник DLL (Баз):
[Obsolete("This method has become obsolete, please override `OnEnable` instead.")]
public virtual void OnSelected() {
}
public virtual void OnEnable() {
}
Пользовательский источник (Foo):
// CS0672 - Doesn't show useful message...
public override void OnSelected() {
}
При создании проекта регистрируется следующее предупреждение:
CS0672: участник
Foo.OnSelected()
переопределяет устаревшего членаBaz.OnSelected()
,
Добавьте устаревший атрибут в `Foo.OnSelected()'
Но я бы хотел, чтобы мое пользовательское устаревшее сообщение было доминирующим в этом предупреждении, чтобы мои клиенты могли следовать предоставленным инструкциям. Есть ли способ добиться этого?
1 ответ
Вы можете добавить второй параметр в свой конструктор атрибута, чтобы сказать компилятору выдать ошибку компиляции (вместо обычного предупреждения "метод устарел"), и ошибка будет использовать сообщение вашего атрибута. Ошибка произойдет, только если метод вызывается.
[Obsolete("This method has become obsolete, please override `OnEnable` instead.", true)]
public virtual void OnSelected() {
}
Обратите внимание, что это не удалит предупреждение CS0672.