Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
| Свойство | Значение |
|---|---|
| Идентификатор правила | CA1047 |
| Заголовок | Не объявляйте защищенные члены в запечатанных типах |
| Категория | Проектирование |
| Исправление является критическим или не критическим | неразрывный |
| Включен по умолчанию в .NET 10 | Как предложение |
| Применимые языки | C# и Visual Basic |
Причина
Общедоступный тип sealed (NotInheritable в Visual Basic) объявляет защищенный элемент или защищенный вложенный тип. Это правило не сообщает о нарушениях для методов Finalize, которые должны следовать этому шаблону.
Описание правила
Типы объявляют защищённые члены, чтобы производные типы могли получить доступ к члену или переопределить его. По определению вы не можете наследовать от запечатанных типов; это означает, что защищенные методы в запечатанных типах вызываться не могут.
Компилятор C# выдает предупреждение CS0628 вместо CA1047 для этой ситуации.
Устранение нарушений
Чтобы устранить нарушение этого правила, измените уровень доступа элемента на частный или сделайте тип наследуемым.
Когда лучше отключить предупреждения
Для этого правила отключать вывод предупреждений не следует. Если оставить тип в его текущем состоянии, это может вызвать проблемы с обслуживанием и не даст никаких преимуществ.
Настройка кода для анализа
Используйте следующий параметр, чтобы выбрать части базы кода для применения этого правила.
Этот параметр можно настроить только для этого правила, для всех правил, к которым он применяется, или для всех правил в этой категории (конструкторе), к которым она применяется. Дополнительные сведения см. в статье Параметры конфигурации правила качества кода.
Включите конкретные поверхности API
Вы можете настроить компоненты базы кода для выполнения этого правила на основе их специальных возможностей, задав параметр api_surface. Например, чтобы указать, что правило должно выполняться только для непубличной поверхности API, добавьте следующую пару "ключ-значение" в файл .editorconfig в ваш проект:
dotnet_code_quality.CAXXXX.api_surface = private, internal
Заметка
Замените XXXX частью CAXXXX идентификатором применимого правила.
Пример
В следующем примере показан тип, нарушающий это правило.
public sealed class SealedClass
{
protected void ProtectedMethod(){}
}
Public NotInheritable Class BadSealedType
Protected Sub MyMethod
End Sub
End Class