CA1061:基底クラス メソッドを非表示にしません

プロパティ
ルール ID CA1061
Title 基底クラス メソッドを非表示にしません
[カテゴリ] デザイン
修正が中断ありか中断なしか あり
.NET 8 では既定で有効 提案として

原因

派生型は、そのいずれかの基底メソッドと同じ名前と同じパラメーター数でメソッドを宣言するものです。パラメーターの 1 つまたは複数が、基底メソッドにおける該当パラメーターの基底型になります。残りのパラメーターには、基底メソッドにおける該当パラメーターに一致する型が与えられます。

規則の説明

派生メソッドのパラメーター シグネチャ内のある型が、基本メソッドのパラメーター シグネチャ内のそれに対応する型より弱く型指定されていることが、両者の唯一の相違点である場合、基本型内のメソッドが派生型内の同じ名前のメソッドによって隠ぺいされます。

違反の修正方法

この規則違反を修正するには、メソッドを削除するか、メソッドの名前を変更するか、メソッドで基底メソッドが非表示にならないよう、パラメーター シグネチャを変更します。

どのようなときに警告を抑制するか

この規則による警告は抑制しないでください。

次の例からは、規則を違反するメソッドを確認できます。

class BaseType
{
    internal void MethodOne(string inputOne, object inputTwo)
    {
        Console.WriteLine("Base: {0}, {1}", inputOne, inputTwo);
    }

    internal void MethodTwo(string inputOne, string inputTwo)
    {
        Console.WriteLine("Base: {0}, {1}", inputOne, inputTwo);
    }
}

class DerivedType : BaseType
{
    internal void MethodOne(string inputOne, string inputTwo)
    {
        Console.WriteLine("Derived: {0}, {1}", inputOne, inputTwo);
    }

    // This method violates the rule.
    internal void MethodTwo(string inputOne, object inputTwo)
    {
        Console.WriteLine("Derived: {0}, {1}", inputOne, inputTwo);
    }
}

class Test
{
    static void Main1061()
    {
        DerivedType derived = new DerivedType();

        // Calls DerivedType.MethodOne.
        derived.MethodOne("string1", "string2");

        // Calls BaseType.MethodOne.
        derived.MethodOne("string1", (object)"string2");

        // Both of these call DerivedType.MethodTwo.
        derived.MethodTwo("string1", "string2");
        derived.MethodTwo("string1", (object)"string2");
    }
}