CS0672:成员`Foo.OnSelected()'覆盖过时的成员`Baz.OnSelected()'

时间:2014-04-23 12:18:41

标签: c# .net visual-studio-2008 compiler-construction compiler-errors

在我的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()'

但我希望我的自定义过时消息在此警告中占主导地位,以便我的客户可以按照提供的说明进行操作。有没有办法实现这个目标?

1 个答案:

答案 0 :(得分:1)

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

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

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