【问题标题】:CS0672: Member `Foo.OnSelected()' overrides obsolete member `Baz.OnSelected()'CS0672:成员“Foo.OnSelected()”覆盖过时的成员“Baz.OnSelected()”
【发布时间】:2014-04-23 12:18:41
【问题描述】:

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

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

【问题讨论】:

  • 能否请您展示您的作品..
  • 您的客户会使用源代码还是编译后的程序集?
  • @Trajan 客户引用已编译的程序集。

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


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-05
    • 2018-04-24
    相关资源
    最近更新 更多