使用英语阅读

通过


编译器警告(等级 1)CS0809

过时成员“memberA”重写未过时成员“memberB”。

通常情况下,标记为过时的成员不应重写未标记为过时的成员。 此警告是在 Visual Studio 2008 中生成的,不是在 Visual Studio 2005 中生成的。

更正此错误

从重写成员删除 Obsolete 特性,或将其添加到基类成员。

示例

// CS0809.cs
public class Base
{
    public virtual void Test1()
    {
    }
}
public class C : Base
{
    [System.Obsolete()]
    public override void Test1() // CS0809
    {
    }
}

被认定为过时的方法

请注意,当实际调用过时的方法时,编译器警告 CS0809 将导致没有 CS0618 警告。
在以下示例中,编译器不会警告方法 Test 已过时,因为编译器在调用时识别的声明位于基类 Base 中,而不是派生类 Derived 中:

class Base
{
    public virtual void Test() {}
}

class Derived : Base
{
    [System.Obsolete()]
    public override void Test() { }
}

static class Program
{
    public static void Main()
    {
        Derived derived = new();
        b.Foo();    // No CS0618
    }
}

为了解决这个问题,还可以将 Obsolete 属性添加到基类中。

另请参阅