CA1050: Dichiarare i tipi negli spazi dei nomi
Proprietà | valore |
---|---|
ID regola | CA1050 |
Title | Dichiarare i tipi negli spazi dei nomi |
Categoria | Progettazione |
Correzione che causa un'interruzione o un'interruzione | Interruzione |
Abilitato per impostazione predefinita in .NET 8 | 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