CA1050: Typen declareren in naamruimten
Eigenschappen | Weergegeven als |
---|---|
Regel-id | CA1050 |
Titel | Typen declareren in naamruimten |
Categorie | Ontwerpen |
Oplossing is brekend of niet-brekend | Breken |
Standaard ingeschakeld in .NET 9 | Als suggestie |
Oorzaak
Een openbaar of beveiligd type wordt gedefinieerd buiten het bereik van een benoemde naamruimte.
Beschrijving van regel
Typen worden gedeclareerd in naamruimten om naamconflicten te voorkomen en als een manier om gerelateerde typen in een objecthiërarchie te organiseren. Typen die zich buiten een benoemde naamruimte bevinden, bevinden zich in een globale naamruimte waarnaar niet kan worden verwezen in code.
Schendingen oplossen
Als u een schending van deze regel wilt oplossen, plaatst u het type in een naamruimte.
Wanneer waarschuwingen onderdrukken
Hoewel u nooit een waarschuwing van deze regel hoeft te onderdrukken, is het veilig om dit te doen wanneer de assembly nooit samen met andere assembly's wordt gebruikt.
Een waarschuwing onderdrukken
Als u slechts één schending wilt onderdrukken, voegt u preprocessorrichtlijnen toe aan uw bronbestand om de regel uit te schakelen en vervolgens opnieuw in te schakelen.
#pragma warning disable CA1050
// The code that's violating the rule is on this line.
#pragma warning restore CA1050
Als u de regel voor een bestand, map of project wilt uitschakelen, stelt u de ernst none
ervan in op het configuratiebestand.
[*.{cs,vb}]
dotnet_diagnostic.CA1050.severity = none
Zie Codeanalysewaarschuwingen onderdrukken voor meer informatie.
Voorbeeld 1
In het volgende voorbeeld ziet u een bibliotheek met een type dat onjuist is gedeclareerd buiten een naamruimte en een type met dezelfde naam die in een naamruimte is gedeclareerd.
// 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
Voorbeeld 2
De volgende toepassing maakt gebruik van de bibliotheek die eerder is gedefinieerd. Het type dat buiten een naamruimte wordt gedeclareerd, wordt gemaakt wanneer de naam Test
niet wordt gekwalificeerd door een naamruimte. Voor toegang tot het Test
type dat in een naamruimte is gedeclareerd, is de naamruimtenaam vereist.
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