CA1050: Dichiarare i tipi negli spazi dei nomi
TypeName |
DeclareTypesInNamespaces |
CheckId |
CA1050 |
Category |
Microsoft.Design |
Breaking Change |
Breaking |
Causa
Un tipo pubblico o protetto viene definito all'esterno dell'ambito di uno spazio dei nomi denominato.
Descrizione della regola
I tipi vengono dichiarati all'interno degli spazi dei nomi per impedire conflitti di denominazione e per organizzare i tipi correlati in una gerarchia di oggetti. I tipi all'esterno di qualsiasi spazio dei nomi denominato sono contenuti 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.
Esclusione di avvisi
Sebbene non sia mai necessario escludere un avviso da questa regola, questa esclusione è sicura se l'assembly non verrà mai utilizzato con altri assembly.
Esempio
Nell'esempio riportato di seguito viene illustrata una libreria con un tipo dichiarato in modo errato all'esterno di uno spazio dei nomi e un tipo con lo stesso nome dichiarato in uno spazio dei nomi.
Imports System
' 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 GoodSpace
Public Class Test
Public Overrides Function ToString() As String
Return "Test lives in a namespace!"
End Function
End Class
End Namespace
using System;
// Violates rule: DeclareTypesInNamespaces.
public class Test
{
public override string ToString()
{
return "Test does not live in a namespace!";
}
}
namespace GoodSpace
{
public class Test
{
public override string ToString()
{
return "Test lives in a namespace!";
}
}
}
Nell'applicazione riportata di seguito viene utilizzata la libreria definita in precedenza. Si noti che il tipo dichiarato all'esterno di uno spazio dei nomi viene creato quando il nome Test non è qualificato da uno spazio dei nomi. Si noti inoltre che per accedere al tipo Test in Goodspace, è necessario disporre del nome dello spazio dei nomi.
Imports System
Namespace ApplicationTester
Public Class MainHolder
Public Shared Sub Main()
Dim t1 As New Test()
Console.WriteLine(t1.ToString())
Dim t2 As New GoodSpace.Test()
Console.WriteLine(t2.ToString())
End Sub
End Class
End Namespace
using System;
namespace ApplicationTester
{
public class MainHolder
{
public static void Main()
{
Test t1 = new Test();
Console.WriteLine(t1.ToString());
GoodSpace.Test t2 = new GoodSpace.Test();
Console.WriteLine(t2.ToString());
}
}
}