Share via


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 Bryta
Aktiverad som standard i .NET 8 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