CA1050: Deklarera typer i namnområden
Property | Värde |
---|---|
Regel-ID | CA1050 |
Title | Deklarera typer i namnområden |
Kategori | Designa |
Korrigeringen är icke-bakåtkompatibel | Brott |
Aktiverad som standard i .NET 9 | Som förslag |
Orsak
En offentlig eller skyddad typ definieras utanför omfånget för ett namngivet namnområde.
Regelbeskrivning
Typer deklareras i namnområden för att förhindra namnkollisioner och som ett sätt att organisera relaterade typer i en objekthierarki. Typer som ligger utanför ett namngivet namnområde finns i ett globalt namnområde som inte kan refereras till i kod.
Så här åtgärdar du överträdelser
Om du vill åtgärda ett brott mot den här regeln placerar du typen i ett namnområde.
När du ska ignorera varningar
Även om du aldrig behöver ignorera en varning från den här regeln är det säkert att göra detta när sammansättningen aldrig kommer att användas tillsammans med andra sammansättningar.
Ignorera en varning
Om du bara vill förhindra en enda överträdelse lägger du till förprocessordirektiv i källfilen för att inaktivera och aktiverar sedan regeln igen.
#pragma warning disable CA1050
// The code that's violating the rule is on this line.
#pragma warning restore CA1050
Om du vill inaktivera regeln för en fil, mapp eller ett projekt anger du dess allvarlighetsgrad till none
i konfigurationsfilen.
[*.{cs,vb}]
dotnet_diagnostic.CA1050.severity = none
Mer information finns i Så här utelämnar du kodanalysvarningar.
Exempel 1
I följande exempel visas ett bibliotek som har en typ som felaktigt deklarerats utanför ett namnområde och en typ som har samma namn deklarerat i ett namnområde.
// 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
Exempel 2
Följande program använder biblioteket som definierades tidigare. Den typ som deklareras utanför ett namnområde skapas när namnet Test
inte är kvalificerat av ett namnområde. För att få åtkomst till den Test
typ som deklareras i ett namnområde krävs namnområdesnamnet.
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