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