Delen via


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