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