Partager via


CA1050 : Déclarer les types dans des espaces de noms

TypeName

DeclareTypesInNamespaces

CheckId

CA1050

Catégorie

Microsoft.CSharp

Modification avec rupture

Oui

Cause

Un type public ou protégé est défini hors de la portée d'un espace de noms nommé.

Description de la règle

Les types sont déclarés dans les espaces de noms pour empêcher des collisions de dénomination, ainsi qu'en guise que méthode d'organisation de types connexes au sein d'une hiérarchie d'objets. Les types situés hors de tout espace de noms nommé s'inscrivent dans un espace de noms global qui ne peut pas être référencé dans un code.

Comment corriger les violations

Pour corriger une violation de cette règle, placez le type dans un espace de noms.

Quand supprimer les avertissements

Même s'il n'est jamais nécessaire de supprimer un avertissement de cette règle, il est possible de le faire sans risque dans les cas où l'assembly ne sera jamais utilisé avec d'autres assemblys.

Exemple

L'exemple suivant présente une bibliothèque dotée d'un type déclaré incorrectement hors d'un espace de noms, et d'un autre de même nom, déclaré dans un espace de noms.

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!";
      }
   }
}   

L'application suivante utilise la bibliothèque définie précédemment. Remarquez que le type déclaré hors d'un espace de noms est créé lorsque le nom Test n'est qualifié par aucun espace de noms. Remarquez également que pour accéder au type Test dans Goodspace, le nom de l'espace de noms est requis.

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