CA1050 : Déclarer les types dans des espaces de nomsCA1050: Declare types in namespaces

TypeNameTypeName DeclareTypesInNamespacesDeclareTypesInNamespaces
CheckIdCheckId CA1050CA1050
CategoryCategory Microsoft.DesignMicrosoft.Design
Modification avec ruptureBreaking Change RuptureBreaking

CauseCause

Un type public ou protégé est défini en dehors de l’étendue d’un espace de noms nommé.A public or protected type is defined outside the scope of a named namespace.

Description de la règleRule Description

Les types sont déclarés dans les espaces de noms pour empêcher des collisions de nom et comme un moyen d’organiser les types associés dans une hiérarchie d’objets.Types are declared in namespaces to prevent name collisions, and as a way to organize related types in an object hierarchy. Les types qui sont en dehors de tout espace de noms nommé sont dans un espace de noms global qui ne peut pas être référencé dans le code.Types that are outside any named namespace are in a global namespace that cannot be referenced in code.

Comment corriger les violationsHow to Fix Violations

Pour corriger une violation de cette règle, placez le type dans un espace de noms.To fix a violation of this rule, place the type in a namespace.

Quand supprimer les avertissementsWhen to Suppress Warnings

Bien que vous deviez jamais supprimer un avertissement de cette règle, il est possible lorsque l’assembly ne sera jamais utilisé avec d’autres assemblys.Although you never have to suppress a warning from this rule, it is safe to do this when the assembly will never be used together with other assemblies.

ExempleExample

L’exemple suivant montre une bibliothèque qui a un type déclaré incorrectement hors d’un espace de noms et un type qui a le même nom déclaré dans un espace de noms.The following example shows a library that has a type incorrectly declared outside a namespace, and a type that has the same name declared in a 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!";
      }
   }
}   
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

ExempleExample

L’application suivante utilise la bibliothèque qui a été définie précédemment.The following application uses the library that was defined previously. Notez que le type qui est déclaré en dehors d’un espace de noms est créé lorsque le nom Test n’est pas qualifié par un espace de noms.Note that the type that is declared outside a namespace is created when the name Test is not qualified by a namespace. Notez également que pour accéder à la Test tapez Goodspace, le nom de l’espace de noms est obligatoire.Note also that to access the Test type in Goodspace, the namespace name is required.

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