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


CA1047: не объявляйте защищенные элементы в запечатанных типах

TypeName

DoNotDeclareProtectedMembersInSealedTypes

CheckId

CA1047

Категория

Microsoft.Design

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

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

Причина

Открытый тип имеет атрибут sealed (NotInheritable в Visual Basic) и объявляет защищенный член или защищенный вложенный тип. Это правило не учитывает нарушения для методов Finalize, для которых такой шаблон обязателен.

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

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

Компилятор C# выдает предупреждение для этой ошибки.

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

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

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

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

Пример

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

Imports System

Namespace DesignLibrary

   Public NotInheritable Class BadSealedType
      Protected  Sub MyMethod
      End Sub
   End Class

End Namespace
using System;

namespace DesignLibrary
{
   public sealed class SealedClass
   {
      protected void ProtectedMethod(){}
   }
}