Les types imbriqués ne doivent pas être visibles
Mise à jour : novembre 2007
TypeName |
NestedTypesShouldNotBeVisible |
CheckId |
CA1034 |
Catégorie |
Microsoft.CSharp |
Modification avec rupture |
Oui |
Cause
Un type visible de l'extérieur contient une déclaration d'un type visible de l'extérieur. Les énumérateurs imbriqués et les types protégés sont exemptés de cette règle.
Description de la règle
Un type imbriqué représente un type déclaré dans la portée d'un autre type. Les types imbriqués sont utiles pour encapsuler les détails de l'implémentation privée du type conteneur. Utilisés à cette fin, les types imbriqués ne doivent pas être visibles de l'extérieur.
N'utilisez pas de types imbriqués visibles de l'extérieur pour le regroupement logique ou pour éviter des collisions de noms ; utilisez plutôt des espaces de noms.
Les types imbriqués incluent la notion d'accessibilité des membres, que quelques programmeurs ne comprennent pas clairement.
Les types protégés peuvent être utilisés dans les sous-classes et les types imbriqués dans des scénarios de personnalisation avancée.
Comment corriger les violations
Si vous ne souhaitez pas que le type imbriqué soit visible de l'extérieur, modifiez l'accessibilité du type. Sinon, éliminez le type imbriqué de son parent. Si le but de l'imbrication consiste à catégoriser le type imbriqué, utilisez plutôt un espace de noms pour créer une hiérarchie.
Quand supprimer les avertissements
Ne supprimez aucun avertissement de cette règle.
Exemple
L'exemple suivant présente un type qui ne respecte pas la règle.
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();
}
};
}