Поделиться через


CA2222: не уменьшайте видимость унаследованных членов

TypeName

DoNotDecreaseInheritedMemberVisibility

CheckId

CA2222

Категория

Microsoft.Usage

Критическое изменение

Не критическое

Причина

Закрытый метод в незапечатанном типе имеет подпись, идентичную с открытым методом, объявленным в базовом типе.Закрытый метод не является окончательным.

Описание правила

Не следует изменять модификатор доступа для унаследованных членов.Если сделать унаследованный член закрытым, то доступ вызывающих объектов к реализации метода базового класса все равно не будет запрещен.Если сделать член закрытым при незапечатанном типе, наследуемые типы могут вызывать последнюю открытую реализацию метода в иерархии наследования.Чтобы изменить модификатор доступа следует либо пометить метод как окончательный, либо запечатать его тип, чтобы избежать переопределения.

Устранение нарушений

Чтобы устранить нарушение этого правила, измените доступ (он не должен быть закрытым).Либо можно сделать метод окончательным, если это поддерживается используемым языком программирования.

Отключение предупреждений

Для этого правила отключать вывод предупреждений не следует.

Пример

В следующем примере показан тип, который нарушает данное правило.

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