Прочитать на английском

Поделиться через


Предупреждение компилятора (уровень 1) CS0809

Устаревший член "членA" переопределяет неустаревший член "членB".

Обычно член, помеченный как устаревший, не должен переопределять член, который не помечен как устаревший. Это предупреждение создается в Visual Studio 2008, но не в Visual Studio 2005.

Исправление ошибки

Удалите атрибут Obsolete из переопределяющего члена или добавьте его в член базового класса.

Пример

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

Методы, распознанные как устаревшие

Обратите внимание, что предупреждение CS0809 компилятора не приведет к предупреждению CS0618 при вызове устаревшего метода.
В следующем примере компилятор не предупреждает об устаревшем методеTest, так как объявление, распознаваемое компилятором при вызове в базовом классе, а не производном классеBaseDerived:

C#
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 класс.

См. также