CA1050: Typen in Namespaces deklarieren.

Eigenschaft Wert
Regel-ID CA1050
Titel Typen in Namespaces deklarieren.
Kategorie Design
Fix führt oder führt nicht zur Unterbrechung Breaking
Standardmäßig in .NET 9 aktiviert Als Vorschlag

Ursache

Ein öffentlicher oder geschützter Typ wird außerhalb des Bereichs eines benannten Namespaces definiert.

Regelbeschreibung

Typen werden in Namespaces deklariert, um Namenskonflikte zu verhindern und um verwandte Typen in einer Objekthierarchie zu organisieren. Typen, die sich außerhalb eines benannten Namespaces befinden, befinden sich in einem globalen Namespace, auf den im Code nicht verwiesen werden kann.

Behandeln von Verstößen

Um einen Verstoß gegen diese Regel zu beheben, platzieren Sie den Typ in einem Namespace.

Wann sollten Warnungen unterdrückt werden?

Obwohl Sie nie eine Warnung aus dieser Regel unterdrücken müssen, können Sie dies bedenkenlos tun, wenn die Assembly nie zusammen mit anderen Assemblys verwendet werden soll.

Unterdrücken einer Warnung

Um nur eine einzelne Verletzung zu unterdrücken, fügen Sie der Quelldatei Präprozessoranweisungen hinzu, um die Regel zu deaktivieren und dann wieder zu aktivieren.

#pragma warning disable CA1050
// The code that's violating the rule is on this line.
#pragma warning restore CA1050

Um die Regel für eine Datei, einen Ordner oder ein Projekt zu deaktivieren, legen Sie den Schweregrad in der Konfigurationsdatei auf none fest.

[*.{cs,vb}]
dotnet_diagnostic.CA1050.severity = none

Weitere Informationen finden Sie unter Vorgehensweise: Unterdrücken von Codeanalyse-Warnungen.

Beispiel 1

Das folgende Beispiel zeigt eine Bibliothek, in der ein Typ fälschlicherweise außerhalb eines Namespaces deklariert ist und ein Typ, der den gleichen Namen hat, in einem Namespace deklariert ist.

// 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

Beispiel 2

Die folgende Anwendung verwendet die zuvor definierte Bibliothek. Der Typ, der außerhalb eines Namespaces deklariert ist, wird erstellt, wenn der Name Test nicht durch einen Namespace qualifiziert ist. Für den Zugriff auf den Test-Typ, der innerhalb eines Namespaces deklariert ist, ist der Name des Namespaces erforderlich.

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