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


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

Товар Значение
Идентификатор правила CA2222
Категория Microsoft.Usage
Критическое изменение Не критическое

Причина

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

Примечание.

Это правило устарело. Дополнительные сведения см. в разделе "Устаревшие правила".

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

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

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

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

Когда лучше отключить предупреждения

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

Пример

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

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