No declarar miembros protegidos en tipos sealed
Actualización: noviembre 2007
Nombre de tipo |
DoNotDeclareProtectedMembersInSealedTypes |
Identificador de comprobación |
CA1047 |
Categoría |
Microsoft.Design |
Cambio problemático |
No problemático |
Motivo
Un tipo público es sealed (NotInheritable en Visual Basic) y declara un miembro protegido o un tipo anidado protegido. Esta regla no realiza ningún informe sobre las infracciones para los métodos Finalize, que deben seguir este modelo.
Descripción de la regla
Los tipos declaran miembros protegidos para que los tipos heredados puedan obtener acceso o reemplazar el miembro. Por definición, no se puede heredar de un tipo sealed, lo que significa que no se puede llamar a los métodos protegidos en tipos sealed.
El compilador de C# emite una advertencia para este error.
Cómo corregir infracciones
Para corregir una infracción de esta regla, cambie el nivel de acceso del miembro a privado o cambie el tipo a heredable.
Cuándo suprimir advertencias
No suprima las advertencias de esta regla. Si se mantiene el estado actual del tipo puede provocar problemas de mantenimiento y no proporciona ventajas.
Ejemplo
El siguiente ejemplo muestra un tipo que infringe esta regla.
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(){}
}
}
El tipo sealed anterior declara un miembro protegido al que no se puede llamar fuera de la clase que lo declara.
Si el método se diseñó para que lo llamen otros tipos, aumente su accesibilidad a pública; en caso contrario, redúzcala a privada.
En el ejemplo siguiente se corrige la infracción anterior aumentando la accesibilidad del método a pública.
Imports System
Namespace Samples
Public NotInheritable Class Book
Protected Sub Read
End Sub
End Class
End Namespace
using System;
namespace Samples
{
public sealed class Book
{
protected void Read()
{
}
}
}