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