Sichtbarkeit für geerbte Member nicht verringern

     TypeName

DoNotDecreaseInheritedMemberVisibility

CheckId

CA2222

Kategorie

Microsoft.Usage

Unterbrechende Änderung

NonBreaking

Ursache

Eine private Methode in einem unversiegelten Typ besitzt eine Signatur, die mit derjenigen einer öffentlichen Methode übereinstimmt, die in einem Basistyp deklariert ist. Die private Methode ist nicht final.

Regelbeschreibung

Sie sollten den Zugriffsmodifizierer für geerbte Member nicht ändern. Wenn Sie einen geerbten Member in private ändern, werden Aufrufer nicht am Zugriff auf die Implementierung der Basisklasse der Methode gehindert. Wenn der Member zu einem privaten gemacht wird und der Typ unversiegelt ist, können erbende Typen die letzte öffentliche Implementierung der Methode in der Vererbungshierarchie aufrufen. Wenn Sie den Zugriffsmodifizierer ändern müssen, muss entweder die Methode als final gekennzeichnet werden, oder ihr Typ muss versiegelt werden, um ein Überschreiben der Methode zu verhindern.

Behandlung von Verstößen

Um einen Verstoß gegen diese Regel zu korrigieren, ändern Sie den Zugriff in nicht-privat. Sie haben aber auch die Möglichkeit, die Methode zu einer final-Methode zu machen, wenn die von Ihnen verwendete Programmiersprache dies unterstützt.

Warnungsausschluss

Schließen Sie keine Warnung dieser Regel aus.

Beispiel

Im folgenden Beispiel wird ein Typ veranschaulicht, der gegen diese Regel verstößt.

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