CA1047: No declarar miembros protegidos en tipos sealedCA1047: Do not declare protected members in sealed types

TypeNameTypeName DoNotDeclareProtectedMembersInSealedTypesDoNotDeclareProtectedMembersInSealedTypes
Identificador de comprobaciónCheckId CA1047CA1047
CategoríaCategory Microsoft.DesignMicrosoft.Design
Cambio problemáticoBreaking Change Poco problemáticoNon-breaking

MotivoCause

Es un tipo público sealed (NotInheritable en Visual basic) y declara un miembro protegido o un tipo anidado protegido.A public type is sealed (NotInheritable in Visual basic) and declares a protected member or a protected nested type. Esta regla no informa de las infracciones de Finalize métodos, que deben seguir este patrón.This rule does not report violations for Finalize methods, which must follow this pattern.

Descripción de la reglaRule description

Los tipos declaran miembros protegidos para que los tipos heredados puedan obtener acceso o reemplazar el miembro.Types declare protected members so that inheriting types can access or override the member. Por definición, no puede heredar de un tipo sealed, lo que significa que los métodos protegidos en tipos sellados no se puede llamar.By definition, you cannot inherit from a sealed type, which means that protected methods on sealed types cannot be called.

El compilador de C# emite una advertencia para este error.The C# compiler issues a warning for this error.

Cómo corregir infraccionesHow to fix violations

Para corregir una infracción de esta regla, cambiar el nivel de acceso del miembro en privado o hacer que el tipo sea heredable.To fix a violation of this rule, change the access level of the member to private, or make the type inheritable.

Cuándo Suprimir advertenciasWhen to suppress warnings

No suprima las advertencias de esta regla.Do not suppress a warning from this rule. Lo que deja el tipo en su estado actual puede causar problemas de mantenimiento y no proporciona ninguna ventaja.Leaving the type in its current state can cause maintenance issues and does not provide any benefits.

EjemploExample

El ejemplo siguiente muestra un tipo que infringe esta regla.The following example shows a type that violates this rule.

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