Sdílet prostřednictvím


CA2222: Nesnižujte viditelnost zděděného členu

TypeName

DoNotDecreaseInheritedMemberVisibility

CheckId

CA2222

Kategorie

Microsoft.Usage

Narušující změna

Nenarušující

Příčina

Soukromá metoda v neuzavřeném typu má podpis, který je totožný s veřejnou metodou deklarovanou v základním typu.Soukromá metoda není konečná.

Popis pravidla

Modifikátor přístupu byste neměli měnit u zděděných členů.Změna zděděného členu na soukromý nezabrání volajícím v přístupu k implementaci základní třídy dané metody.Pokud se člen stane soukromým a typ je neuzavřený, mohou zděděné typy volat poslední veřejnou implementaci metody v hierarchii dědičnosti.Pokud jste nucení změnit modifikátor přístupu, měla by metoda být označená jako konečná nebo by měl být její typ uzavřen pro zabránění přepsání metody.

Jak vyřešit porušení

Pro vyřešení porušení tohoto pravidla, změňte přístup na neveřejný.Můžete také, pokud to umožňuje programovací jazyk, nastavit tuto metodu jako konečnou.

Kdy potlačit upozornění

Nepotlačujte upozornění na toto pravidlo.

Příklad

Následující příklad ukazuje typ, který porušuje toto pravidlo.

Imports System

Namespace UsageLibrary
Public Class ABaseType

   Public Sub BasePublicMethod(argument1 As Integer)
   End Sub 'BasePublicMethod

End Class 'ABaseType 

Public Class ADerivedType
   Inherits ABaseType

   ' Violates rule DoNotDecreaseInheritedMemberVisibility. 
   Private Shadows Sub BasePublicMethod(argument1 As Integer)
   End Sub 'BasePublicMethod
End Class 'ADerivedType

End Namespace
using System;
namespace UsageLibrary
{
    public class ABaseType
    {
        public void BasePublicMethod(int argument1) {}
    }
    public class ADerivedType:ABaseType
    {
        // Violates rule: DoNotDecreaseInheritedMemberVisibility. 
        // The compiler returns an error if this is overridden instead of new. 
        private new void BasePublicMethod(int argument1){}       
    }
}