CA1050: Deklaruj typy w przestrzeni nazw

Właściwości Wartość
Identyfikator reguły CA1050
Tytuł Deklaruj typy w przestrzeniach nazw
Kategoria Projekt
Poprawka powodująca niezgodność lub niezgodność Kluczowa
Domyślnie włączone na platformie .NET 8 Jako sugestia

Przyczyna

Typ publiczny lub chroniony jest zdefiniowany poza zakresem nazwanej przestrzeni nazw.

Opis reguły

Typy są deklarowane w przestrzeniach nazw, aby zapobiec kolizjom nazw i jako sposób organizowania powiązanych typów w hierarchii obiektów. Typy, które znajdują się poza dowolną nazwaną przestrzenią nazw, znajdują się w globalnej przestrzeni nazw, do której nie można odwoływać się w kodzie.

Jak naprawić naruszenia

Aby naprawić naruszenie tej reguły, umieść typ w przestrzeni nazw.

Kiedy pomijać ostrzeżenia

Chociaż nigdy nie trzeba pomijać ostrzeżenia przed tą regułą, można to zrobić, gdy zestaw nigdy nie będzie używany razem z innymi zestawami.

Pomijanie ostrzeżenia

Jeśli chcesz po prostu pominąć pojedyncze naruszenie, dodaj dyrektywy preprocesora do pliku źródłowego, aby wyłączyć, a następnie ponownie włączyć regułę.

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

Aby wyłączyć regułę dla pliku, folderu lub projektu, ustaw jego ważność na none w pliku konfiguracji.

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

Aby uzyskać więcej informacji, zobacz Jak pominąć ostrzeżenia dotyczące analizy kodu.

Przykład 1

W poniższym przykładzie pokazano bibliotekę, która ma niepoprawnie zadeklarowany typ poza przestrzenią nazw, oraz typ o tej samej nazwie zadeklarowanej w przestrzeni nazw.

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

Przykład 2

Poniższa aplikacja używa wcześniej zdefiniowanej biblioteki. Typ zadeklarowany poza przestrzenią nazw jest tworzony, gdy nazwa Test nie jest kwalifikowana przez przestrzeń nazw. Aby uzyskać dostęp do Test typu zadeklarowanego wewnątrz przestrzeni nazw, wymagana jest nazwa przestrzeni nazw.

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