Non dichiarare membri protetti nei tipi sealed
Aggiornamento: novembre 2007
TypeName |
DoNotDeclareProtectedMembersInSealedTypes |
CheckId |
CA1047 |
Category |
Microsoft.Design |
Breaking Change |
Non sostanziale |
Causa
Un tipo pubblico è sealed (NotInheritable in Visual Basic) e dichiara un membro protetto o un tipo nidificato protetto. Questa regola non segnala violazioni per i metodi Finalize che devono seguire questo modello.
Descrizione della regola
I tipi dichiarano membri protetti in modo che i tipi che ereditano possano accedere al membro o eseguirne l'override. Per definizione, non è possibile ereditare da un tipo sealed, pertanto non è possibile chiamare metodi protetti su tipi sealed.
Il compilatore C# genera un avviso per questo errore.
Correzione di violazioni
Per correggere una violazione di questa regola, modificare il livello di accesso del membro in privato oppure rendere ereditabile il tipo.
Esclusione di avvisi
Non escludere un avviso da questa regola. Se si lascia il tipo nello stato corrente è possibile causare problemi di gestione e non ottenere alcun vantaggio.
Esempio
Nell'esempio riportato di seguito viene illustrato un tipo che viola questa regola.
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(){}
}
}
Il tipo sealed precedente dichiara un membro protetto che non può essere chiamato fuori della classe che lo dichiara.
Se il metodo è stato progettato per essere chiamato da altri tipi, impostare l'accessibilità su Public, in caso contrario, impostarla su Private.
Nell'esempio seguente viene risolta la violazione precedente migliorando l'accesso facilitato del metodo a Public.
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()
{
}
}
}