CS0672:成员`Foo.OnSelected()';重写过时的成员`Baz.OnSelected()';

本文关键字:OnSelected 成员 Baz 过时 CS0672 Foo 重写 | 更新日期: 2023-09-27 17:59:51

在我的DLL中,我使用System.ObsoleteAttribute将一个虚拟方法标记为过时,但这并没有产生我预期的警告。

DLL源(Baz):

[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()
将Obsolete属性添加到`Foo.OnSelected()'

但我希望我的自定义过时信息在此警告中占主导地位,以便我的客户能够遵循提供的说明。有办法做到这一点吗?

CS0672:成员`Foo.OnSelected()';重写过时的成员`Baz.OnSelected()';

您可以在属性构造函数中添加第二个参数,告诉编译器抛出编译错误(而不是通常的"方法已过时"警告),错误将使用属性的消息只有在调用该方法时才会发生错误

[Obsolete("This method has become obsolete, please override `OnEnable` instead.", true)]
public virtual void OnSelected() {
}

请注意,这不会删除CS0672警告。