CA2222: 継承されたメンバーの参照範囲を縮小しません

TypeName

DoNotDecreaseInheritedMemberVisibility

CheckId

CA2222

カテゴリ

Microsoft.Usage

互換性に影響する変更点

なし

原因

シールされていない型のプライベート メソッドに、基本型で宣言されたパブリック メソッドと同一のシグネチャがあります。 プライベート メソッドは final ではありません。

規則の説明

継承メンバーのアクセス修飾子は変更しないでください。 継承メンバーをプライベートに変更しても、呼び出し元はメソッドの基本クラスの実装にアクセスできます。 メンバーをプライベートにして型をシールしない場合、型の継承によって、継承階層で最後に当たるメソッドのパブリック実装が呼び出される可能性があります。 アクセス修飾子を変更する必要がある場合、メソッドを final とマークするか、型をシールして、メソッドがオーバーライドされないようにします。

違反の修正方法

この規則違反を修正するには、アクセスをプライベート以外に変更します。 または、プログラミング言語でサポートされていれば、メソッドを final にします。

警告を抑制する状況

この規則による警告は抑制しないでください。

使用例

この規則に違反する型を次の例に示します。

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