CA1061: Não ocultar métodos de classe base
Property | valor |
---|---|
ID da regra | CA1061 |
Título | Não oculte métodos de classe base |
Categoria | Desenho |
A correção está quebrando ou não quebrando | Quebrando |
Habilitado por padrão no .NET 8 | Como sugestão |
Motivo
Um tipo derivado declara um método com o mesmo nome e com o mesmo número de parâmetros que um dos seus métodos base; um ou mais parâmetros é um tipo de base do parâmetro correspondente no método base; e quaisquer parâmetros restantes têm tipos que são idênticos aos parâmetros correspondentes no método base.
Descrição da regra
Um método em um tipo base é oculto por um método com nome idêntico em um tipo derivado quando a assinatura do parâmetro do método derivado difere apenas por tipos que são mais fracamente derivados do que os tipos correspondentes na assinatura do parâmetro do método base.
Como corrigir violações
Para corrigir uma violação dessa regra, remova ou renomeie o método ou altere a assinatura do parâmetro para que o método não oculte o método base.
Quando suprimir avisos
Não suprima um aviso desta regra.
Exemplo
O exemplo a seguir mostra um método que viola a regra.
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");
}
}