CA2222: Nie zmniejszaj widoczności dziedziczonego elementu członkowskiego
TypeName |
DoNotDecreaseInheritedMemberVisibility |
CheckId |
CA2222 |
Kategoria |
Microsoft.Usage |
Zmiana kluczowa |
Niekluczowa |
Przyczyna
Metoda prywatna w niezamkniętym typie ma sygnaturę identyczną z publiczną metodą zadeklarowaną w typie podstawowym.Metoda prywatna nie jest ostateczna.
Opis reguły
Nie należy zmieniać modyfikatora dostępu dla dziedziczonych elementów członkowskich.Zmiana dziedziczonego elementu członkowskiego na prywatny nie uniemożliwia wywołującym uzyskania dostępu do implementacji metody klasy podstawowej.Jeśli element członkowski jest prywatny, a typ nie jest zamknięty, dziedziczące typy mogą wywołać ostatnią publiczną implementację metody w hierarchii dziedziczenia.Jeśli trzeba zmienić modyfikator dostępu, metoda powinna zostać oznaczona jako ostateczna lub jej typ powinny zostać zamknięty, aby zapobiec zastąpieniu.
Jak naprawić naruszenia
Aby usunąć naruszenie tej zasady, należy zmienić dostęp do na nieprywatny.Ewentualnie, jeśli język programowania obsługuje taką możliwość, można uczynić metodę zamkniętą.
Kiedy pomijać ostrzeżenia
Nie należy pomijać ostrzeżenia dotyczącego tej reguły.
Przykład
Poniższy przykład pokazuje typ, który narusza regułę.
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){}
}
}