Condividi tramite


CA1050: Dichiarare i tipi negli spazi dei nomi

Proprietà valore
ID regola CA1050
Title Dichiarare i tipi negli spazi dei nomi
Categoria Progettazione
La correzione causa un'interruzione o meno Interruzione
Abilitato per impostazione predefinita in .NET 9 Come suggerimento

Causa

Un tipo pubblico o protetto viene definito all'esterno dell'ambito di uno spazio dei nomi denominato.

Descrizione regola

I tipi vengono dichiarati negli spazi dei nomi per evitare conflitti di nomi e come modo per organizzare i tipi correlati in una gerarchia di oggetti. I tipi esterni a qualsiasi spazio dei nomi denominato si trovano in uno spazio dei nomi globale a cui non è possibile fare riferimento nel codice.

Come correggere le violazioni

Per correggere una violazione di questa regola, inserire il tipo in uno spazio dei nomi.

Quando eliminare gli avvisi

Anche se non è mai necessario eliminare un avviso da questa regola, è possibile farlo quando l'assembly non verrà mai usato insieme ad altri assembly.

Eliminare un avviso

Se si vuole eliminare una singola violazione, aggiungere direttive del preprocessore al file di origine per disabilitare e quindi riabilitare la regola.

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

Per disabilitare la regola per un file, una cartella o un progetto, impostarne la gravità none su nel file di configurazione.

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

Per altre informazioni, vedere Come eliminare gli avvisi di analisi del codice.

Esempio 1

Nell'esempio seguente viene illustrata una libreria con un tipo dichiarato in modo non corretto all'esterno di uno spazio dei nomi e un tipo con lo stesso nome dichiarato in uno spazio dei nomi.

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

Esempio 2

L'applicazione seguente usa la libreria definita in precedenza. Il tipo dichiarato all'esterno di uno spazio dei nomi viene creato quando il nome Test non è qualificato da uno spazio dei nomi. Per accedere al Test tipo dichiarato all'interno di uno spazio dei nomi, è necessario il nome dello spazio dei nomi.

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