Leggere in inglese

Condividi tramite


Avviso del compilatore (livello 1) CS0809

Il membro obsoleto 'memberA' esegue l'override del membro non obsoleto 'memberB'.

In genere, un membro contrassegnato come obsoleto non deve eseguire l'override di un membro che non è contrassegnato come obsoleto. Questo avviso viene generato in Visual Studio 2008 ma non in Visual Studio 2005.

Per correggere l'errore

Rimuovere l'attributo Obsolete dal membro che esegue l'override oppure aggiungerlo al membro di classe base.

Esempio

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

Metodi riconosciuti come obsoleti

Si noti che l'avviso del compilatore CS0809 non genera alcun avviso di CS0618 quando chiama effettivamente il metodo obsoleto.
Nell'esempio seguente il compiler non avviserà che il metodo Test è obsoleto, perché la dichiarazione riconosciuta dal compilatore durante la chiamata si trova nella classe base Base, non nella classe derivata 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
    }
}

Per risolvere questo problema, aggiungere anche l'attributo Obsolete alla classe base.

Vedi anche