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