Condividi tramite


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());
        }
    }
}