Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Aggiornamento: novembre 2007
TypeName |
NestedTypesShouldNotBeVisible |
CheckId |
CA1034 |
Category |
Microsoft.Design |
Breaking Change |
Breaking |
Causa
Un tipo visibile esternamente contiene una dichiarazione di tipo visibile esternamente. Enumeratori e tipi protetti nidificati non sono interessati da questa regola.
Descrizione della regola
Un tipo nidificato è un tipo dichiarato all'interno dell'ambito di un altro tipo. I tipi nidificati sono utili per incapsulare dettagli di implementazione privati del tipo contenitore. I tipi nidificati utilizzati per questo scopo non devono essere visibili esternamente.
Evitare di utilizzare tipi nidificati visibili esternamente per raggruppamenti logici o per evitare conflitti di nomi, utilizzare invece spazi dei nomi.
I tipi nidificati includono la nozione di accessibilità del membro, che non viene compresa chiaramente da alcuni programmatori.
I tipi protetti possono essere utilizzati in sottoclassi e i tipi nidificati negli scenari di personalizzazione avanzata.
Correzione di violazioni
Se non si desidera che il tipo nidificato sia visibile esternamente, modificare l'accessibilità del tipo. In caso contrario rimuovere il tipo nidificato dall'elemento padre. Se lo scopo della nidificazione è quello di assegnare una categoria al tipo nidificato, utilizzare in sostituzione uno spazio dei nomi per creare la gerarchia.
Esclusione di avvisi
Non escludere un avviso da questa regola.
Esempio
Nell'esempio riportato di seguito viene illustrato un tipo che viola la regola.
Imports System
Namespace DesignLibrary
Class ParentType
Public Class NestedType
Sub New()
End Sub
End Class
Sub New()
End Sub
End Class
End Namespace
using System;
namespace DesignLibrary
{
internal class ParentType
{
public class NestedType
{
public NestedType()
{
}
}
public ParentType()
{
NestedType nt = new NestedType();
}
}
}
using namespace System;
namespace DesignLibrary
{
public ref class ParentType
{
public:
ref class NestedType
{
public:
NestedType()
{
}
};
ParentType()
{
NestedType^ nt = gcnew NestedType();
}
};
}