CA1061: 기본 클래스 메서드를 숨기지 마십시오.

속성
규칙 ID CA1061
타이틀 기본 클래스 메서드를 숨기지 마십시오.
범주 디자인
수정 사항이 주요 변경인지 여부 주요 변경
.NET 8에서 기본적으로 사용 제안 사항

원인

파생된 형식은 동일한 이름과 기본 메서드 중 하나와 동일한 수의 매개 변수를 사용하여 메서드를 선언합니다. 하나 이상의 매개 변수는 기본 메서드에서 해당하는 매개 변수의 기본 형식입니다. 그리고 나머지 모든 매개 변수에는 기본 메서드의 해당 매개 변수와 동일한 형식이 있습니다.

규칙 설명

파생된 메서드의 매개 변수 시그니처가 기본 메서드의 매개 변수 시그니처에 있는 해당 형식보다 더 약하게 파생된 형식이라는 점만 다른 경우 기본 형식의 메서드는 파생된 형식에 있는 동일한 이름의 메서드에 의해 숨겨집니다.

위반 문제를 해결하는 방법

이 규칙 위반 문제를 해결하려면 메서드를 제거하거나 이름을 변경하거나 매개 변수 시그니처를 변경하여 메서드가 기본 메서드를 숨기지 않도록 합니다.

경고를 표시하지 않는 경우

이 규칙에서는 경고를 표시해야 합니다.

예시

다음 예제에서는 규칙을 위반하는 메서드를 보여 줍니다.

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