Export (0) Print
Expand All
Expand Minimize

Do not decrease inherited member visibility

TypeName

DoNotDecreaseInheritedMemberVisibility

CheckId

CA2222

Category

Microsoft.Usage

Breaking Change

Non Breaking

A private method in an unsealed type has a signature that is identical to a public method declared in a base type. The private method is not final.

You should not change the access modifier for inherited members. Changing an inherited member to private does not prevent callers from accessing the base class implementation of the method. If the member is made private and the type is unsealed, inheriting types can call the last public implementation of the method in the inheritance hierarchy. If you must change the access modifier, either the method should be marked final or its type should be sealed to prevent the method from being overridden.

To fix a violation of this rule, change the access to be non-private. Alternatively, if your programming language supports it, you can make the method final.

Do not suppress a warning from this rule.

The following example shows a type that violates this rule.

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

Community Additions

ADD
Show:
© 2014 Microsoft