编译器警告(等级 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
属性添加到基类中。