Megosztás a következőn keresztül:


CA1050: Típusok deklarálása névterekben

Tulajdonság Érték
Szabályazonosító CA1050
Cím Típusok deklarálása névterekben
Kategória Design
A javítás kompatibilitástörő vagy nem törik Törés
Alapértelmezés szerint engedélyezve a .NET 8-ban Javaslatként

Ok

A névtér hatókörén kívül egy nyilvános vagy védett típus van definiálva.

Szabály leírása

A típusok névterekben vannak deklarálva a névütközések megakadályozása érdekében, valamint a kapcsolódó típusok objektumhierarchiában való rendszerezésére. Az elnevezett névtéren kívül eső típusok olyan globális névtérben találhatók, amelyekre a kód nem hivatkozhat.

Szabálysértések kijavítása

A szabály megsértésének kijavításához helyezze a típust egy névtérbe.

Mikor kell letiltani a figyelmeztetéseket?

Bár soha nem kell elfojtani a szabály figyelmeztetését, ezt nyugodtan megteheti, ha a szerelvény soha nem lesz más szerelvényekkel együtt használva.

Figyelmeztetés mellőzése

Ha csak egyetlen szabálysértést szeretne letiltani, adjon hozzá előfeldolgozási irányelveket a forrásfájlhoz a szabály letiltásához és újbóli engedélyezéséhez.

#pragma warning disable CA1050
// The code that's violating the rule is on this line.
#pragma warning restore CA1050

Ha le szeretné tiltani egy fájl, mappa vagy projekt szabályát, állítsa annak súlyosságát none a konfigurációs fájlban.

[*.{cs,vb}]
dotnet_diagnostic.CA1050.severity = none

További információ: Kódelemzési figyelmeztetések letiltása.

1. példa

Az alábbi példa egy olyan kódtárat mutat be, amely egy névtéren kívül helytelenül deklarált típussal rendelkezik, valamint egy névtérben azonos nevű típust.

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

2. példa

Az alábbi alkalmazás a korábban definiált kódtárat használja. A névtéren kívül deklarált típus akkor jön létre, ha a nevet Test nem minősíti névtér. A névtérben deklarált típus eléréséhez Test szükség van a névtér nevére.

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