次の方法で共有


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

プロパティ
ルール ID CA1061
Title 基底クラス メソッドを非表示にしません
[カテゴリ] デザイン
修正が破壊的か非破壊的か 速報
.NET 10 で既定で有効 一つの提案として
該当する言語 C# と Visual Basic

原因

派生型は、そのいずれかの基底メソッドと同じ名前と同じパラメーター数でメソッドを宣言するものです。パラメーターの 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();

        // 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");
    }
}