CA1050: Declare tipos en espacios de nombresCA1050: Declare types in namespaces

TypeNameTypeName DeclareTypesInNamespacesDeclareTypesInNamespaces
Identificador de comprobaciónCheckId CA1050CA1050
CategoríaCategory Microsoft.DesignMicrosoft.Design
Cambio problemáticoBreaking Change ProblemáticoBreaking

MotivoCause

Un tipo público o protegido se define fuera del ámbito de un espacio de nombres.A public or protected type is defined outside the scope of a named namespace.

Descripción de la reglaRule Description

Los tipos se declaran en los espacios de nombres para evitar conflictos de nombres y como una manera de organizar los tipos relacionados en una jerarquía de objetos.Types are declared in namespaces to prevent name collisions, and as a way to organize related types in an object hierarchy. Tipos que se encuentran fuera de cualquier espacio de nombres están en un espacio de nombres global que no se puede hacer referencia en el código.Types that are outside any named namespace are in a global namespace that cannot be referenced in code.

Cómo corregir infraccionesHow to Fix Violations

Para corregir una infracción de esta regla, coloque el tipo en un espacio de nombres.To fix a violation of this rule, place the type in a namespace.

Cuándo suprimir advertenciasWhen to Suppress Warnings

Aunque nunca tienen que suprimir una advertencia de esta regla, es seguro hacerlo cuando el ensamblado nunca se usará junto con otros ensamblados.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.

EjemploExample

En el ejemplo siguiente se muestra una biblioteca que tiene un tipo declarado incorrectamente fuera de un espacio de nombres y un tipo que tiene el mismo nombre declarado en un espacio de nombres.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

EjemploExample

La aplicación siguiente utiliza la biblioteca que se definió anteriormente.The following application uses the library that was defined previously. Tenga en cuenta que el tipo que se declara fuera de un espacio de nombres se crea cuando el nombre Test no está calificado por un espacio de nombres.Note that the type that is declared outside a namespace is created when the name Test is not qualified by a namespace. Tenga en cuenta también que para tener acceso a la Test escriba en Goodspace, el nombre de espacio de nombres es obligatorio.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