CA1050 : Déclarer les types dans des espaces de noms
Propriété | Value |
---|---|
Identificateur de la règle | CA1050 |
Titre | Déclarer les types dans des espaces de noms |
Catégorie | Conception |
Le correctif est cassant ou non cassant | Rupture |
Activé par défaut dans .NET 8 | Comme suggestion |
Cause
Un type public ou protégé est défini en dehors de l’étendue d’un espace de noms nommé.
Description de la règle
Les types sont déclarés au sein d’espaces de noms pour empêcher des collisions de dénomination, ainsi qu’en guise de méthode d’organisation de types connexes au sein d’une hiérarchie d’objets. Les types qui se trouvent en dehors d’un espace de noms nommé se trouvent dans un espace de noms global qui ne peut pas être référencé dans le 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
Bien que vous n’ayez jamais à supprimer un avertissement de cette règle, vous pouvez le faire sans risque lorsque l’assembly ne sera jamais utilisé avec d’autres assemblys.
Supprimer un avertissement
Si vous voulez supprimer une seule violation, ajoutez des directives de préprocesseur à votre fichier source pour désactiver et réactiver la règle.
#pragma warning disable CA1050
// The code that's violating the rule is on this line.
#pragma warning restore CA1050
Pour désactiver la règle sur un fichier, un dossier ou un projet, définissez sa gravité sur none
dans le fichier de configuration.
[*.{cs,vb}]
dotnet_diagnostic.CA1050.severity = none
Pour plus d’informations, consultez Comment supprimer les avertissements de l’analyse de code.
Exemple 1
L’exemple suivant montre une bibliothèque qui a un type incorrectement déclaré en dehors d’un espace de noms, et un type qui a le même nom déclaré dans un espace de noms.
// Violates rule: DeclareTypesInNamespaces.
using System;
public class Test
{
public override string ToString()
{
return "Test does not live in a namespace!";
}
}
namespace ca1050
{
public class Test
{
public override string ToString()
{
return "Test lives in a namespace!";
}
}
}
' 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 ca1050
Public Class Test
Public Overrides Function ToString() As String
Return "Test lives in a namespace!"
End Function
End Class
End Namespace
Exemple 2
L’application suivante utilise la bibliothèque qui a été définie précédemment. Le type déclaré en dehors d’un espace de noms est créé lorsque le nom Test
n’est pas qualifié par un espace de noms. Pour accéder au type Test
déclaré dans un espace de noms, le nom de l’espace de noms est requis.
public class MainHolder
{
public static void Main1050()
{
Test t1 = new Test();
Console.WriteLine(t1.ToString());
ca1050.Test t2 = new ca1050.Test();
Console.WriteLine(t2.ToString());
}
}
Public Class MainHolder
Public Shared Sub Main1050()
Dim t1 As New Test()
Console.WriteLine(t1.ToString())
Dim t2 As New ca1050.Test()
Console.WriteLine(t2.ToString())
End Sub
End Class