Do not decrease inherited member visibility
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.
The following example shows a type that violates this rule.
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