CA1050: Deklarujte typy v oborech názvů

Vlastnost Hodnota
ID pravidla CA1050
Název Deklarujte typy v oborech názvů
Kategorie Návrh
Oprava způsobující chybu nebo chybu způsobující chybu Narušující
Povoleno ve výchozím nastavení v .NET 8 Jako návrh

Příčina

Veřejný nebo chráněný typ je definován mimo rozsah pojmenovaného oboru názvů.

Popis pravidla

Typy jsou deklarovány v oborech názvů, aby se zabránilo kolizím názvů, a jako způsob uspořádání souvisejících typů v hierarchii objektů. Typy, které jsou mimo libovolný pojmenovaný obor názvů, jsou v globálním oboru názvů, na který nelze odkazovat v kódu.

Jak opravit porušení

Chcete-li opravit porušení tohoto pravidla, umístěte typ do oboru názvů.

Kdy potlačit upozornění

I když nikdy nemusíte potlačit upozornění z tohoto pravidla, je bezpečné to udělat, když sestavení nebude nikdy použito společně s jinými sestaveními.

Potlačení upozornění

Pokud chcete pouze potlačit jedno porušení, přidejte do zdrojového souboru direktivy preprocesoru, abyste pravidlo zakázali a znovu povolili.

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

Pokud chcete pravidlo pro soubor, složku nebo projekt zakázat, nastavte jeho závažnost v none konfiguračním souboru.

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

Další informace naleznete v tématu Jak potlačit upozornění analýzy kódu.

Příklad 1

Následující příklad ukazuje knihovnu, která má nesprávně deklarovaný typ mimo obor názvů, a typ, který má stejný název deklarovaný v oboru názvů.

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

Příklad 2

Následující aplikace používá knihovnu, která byla definována dříve. Typ deklarovaný mimo obor názvů se vytvoří, pokud Test název není kvalifikovaný oborem názvů. Pokud chcete získat přístup k Test typu deklarovanému uvnitř oboru názvů, je název oboru názvů povinný.

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