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){}
}
}