CA2222: Non diminuire la visibilità di membri ereditati
TypeName |
DoNotDecreaseInheritedMemberVisibility |
CheckId |
CA2222 |
Category |
Microsoft.Usage |
Breaking Change |
Non sostanziale |
Causa
Un metodo privato in un tipo non sealed presenta una firma identica a un metodo pubblico dichiarato in un tipo di base. Il metodo privato non è finale.
Descrizione della regola
Non modificare il modificatore di accesso per i membri ereditati. La modifica in privato di un membro ereditato non impedisce ai chiamanti di accedere all'implementazione della classe base del metodo. Se il membro è reso privato e il tipo è non sealed, i tipi che ereditano possono chiamare l'ultima implementazione pubblica del metodo nella gerarchia di ereditarietà. Se è necessario modificare il modificatore di accesso, il metodo deve essere contrassegnato come finale oppure il relativo tipo deve essere sealed per impedire che il metodo venga sottoposto a ovverride.
Come correggere le violazioni
Per correggere una violazione di questa regola, impostare l'accesso su non privato. In alternativa, è possibile rendere il metodo finale, purché il linguaggio di programmazione supporti tale operazione.
Esclusione di avvisi
Non escludere un avviso da questa regola.
Esempio
Nell'esempio riportato di seguito viene illustrato un tipo che viola questa regola.
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){}
}
}