英語で読む

次の方法で共有


コンパイラの警告 (レベル 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 属性を追加します。

関連項目