Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
| 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 10 | 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();
Console.WriteLine(t1.ToString());
ca1050.Test t2 = new();
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