CA1050 : Déclarer les types dans des espaces de noms
TypeName |
DeclareTypesInNamespaces |
CheckId |
CA1050 |
Catégorie |
Microsoft.CSharp |
Modification avec rupture |
Oui |
Cause
Un type public ou protégé est défini hors de la portée d'un espace de noms nommé.
Description de la règle
Les types sont déclarés dans les espaces de noms pour empêcher des collisions de dénomination, ainsi qu'en guise que méthode d'organisation de types connexes au sein d'une hiérarchie d'objets. Les types situés hors de tout espace de noms nommé s'inscrivent dans un espace de noms global qui ne peut pas être référencé dans un code.
Comment corriger les violations
Pour corriger une violation de cette règle, placez le type dans un espace de noms.
Quand supprimer les avertissements
Même s'il n'est jamais nécessaire de supprimer un avertissement de cette règle, il est possible de le faire sans risque dans les cas où l'assembly ne sera jamais utilisé avec d'autres assemblys.
Exemple
L'exemple suivant présente une bibliothèque dotée d'un type déclaré incorrectement hors d'un espace de noms, et d'un autre de même nom, déclaré dans un espace de noms.
Imports System
' Violates rule: DeclareTypesInNamespaces.
Public Class Test
Public Overrides Function ToString() As String
Return "Test does not live in a namespace!"
End Function
End Class
Namespace GoodSpace
Public Class Test
Public Overrides Function ToString() As String
Return "Test lives in a namespace!"
End Function
End Class
End Namespace
using System;
// Violates rule: DeclareTypesInNamespaces.
public class Test
{
public override string ToString()
{
return "Test does not live in a namespace!";
}
}
namespace GoodSpace
{
public class Test
{
public override string ToString()
{
return "Test lives in a namespace!";
}
}
}
L'application suivante utilise la bibliothèque définie précédemment. Remarquez que le type déclaré hors d'un espace de noms est créé lorsque le nom Test n'est qualifié par aucun espace de noms. Remarquez également que pour accéder au type Test dans Goodspace, le nom de l'espace de noms est requis.
Imports System
Namespace ApplicationTester
Public Class MainHolder
Public Shared Sub Main()
Dim t1 As New Test()
Console.WriteLine(t1.ToString())
Dim t2 As New GoodSpace.Test()
Console.WriteLine(t2.ToString())
End Sub
End Class
End Namespace
using System;
namespace ApplicationTester
{
public class MainHolder
{
public static void Main()
{
Test t1 = new Test();
Console.WriteLine(t1.ToString());
GoodSpace.Test t2 = new GoodSpace.Test();
Console.WriteLine(t2.ToString());
}
}
}