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