CA1061: 基本クラス メソッドを非表示にしません
TypeName |
DoNotHideBaseClassMethods |
CheckId |
CA1061 |
[カテゴリ] |
Microsoft.Design |
互換性に影響する変更点 |
あり |
原因
派生型が、基本メソッドの 1 つと同じ名前および同じ数のパラメーターを使用してメソッドを宣言しています。1 つまたは複数のパラメーターは基本メソッドの対応するパラメーターの基本型であり、残りのパラメーターの型がすべて基本メソッドの対応するパラメーターの型と同一です。
規則の説明
派生メソッドのパラメーター シグネチャ内のある型が、基本メソッドのパラメーター シグネチャ内のそれに対応する型より弱く型指定されていることが、両者の唯一の相違点である場合、基本型内のメソッドが派生型内の同じ名前のメソッドによって隠ぺいされます。
違反の修正方法
この規則の違反を修正するには、メソッドを削除するか、メソッドの名前を変更するか、またはパラメーター シグネチャを変更して、メソッドが基本メソッドを隠ぺいしないようにします。
警告を抑制する状況
この規則による警告は抑制しないでください。
使用例
この規則に違反するメソッドを次の例に示します。
using System;
namespace DesignLibrary
{
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 Main()
{
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");
}
}
}