CA1050: Declarar tipos en espacios de nombres

Propiedad Value
Identificador de la regla CA1050
Título Declarar tipos en espacios de nombres
Categoría Diseño
La corrección es problemática o no problemática Problemático
Habilitado de forma predeterminada en .NET 8 Como sugerencia

Causa

Un tipo público o protegido está definido fuera del ámbito de un espacio de nombres con nombre.

Descripción de la regla

Los tipos se declaran dentro de los espacios de nombres para evitar conflictos de nombre y como una forma de organizar los tipos relacionados en una jerarquía de objetos. Los tipos que están fuera de un espacio de nombres con nombre se encuentran en un espacio de nombres global al que no se puede hacer referencia en el código.

Cómo corregir infracciones

Para corregir una infracción de esta regla, coloque el tipo en un espacio de nombres.

Cuándo suprimir las advertencias

Aunque no es necesario suprimir una advertencia de esta regla, es seguro hacerlo cuando el ensamblado no se va a usar nunca junto con otros ensamblados.

Supresión de una advertencia

Si solo quiere suprimir una única infracción, agregue directivas de preprocesador al archivo de origen para deshabilitar y volver a habilitar la regla.

#pragma warning disable CA1050
// The code that's violating the rule is on this line.
#pragma warning restore CA1050

Para deshabilitar la regla de un archivo, una carpeta o un proyecto, establezca su gravedad en none del archivo de configuración.

[*.{cs,vb}]
dotnet_diagnostic.CA1050.severity = none

Para obtener más información, consulte Procedimiento para suprimir advertencias de análisis de código.

Ejemplo 1

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.

// Violates rule: DeclareTypesInNamespaces.
using System;

public class Test
{
    public override string ToString()
    {
        return "Test does not live in a namespace!";
    }
}

namespace ca1050
{
    public class Test
    {
        public override string ToString()
        {
            return "Test lives in a namespace!";
        }
    }
}
' 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 ca1050

    Public Class Test

        Public Overrides Function ToString() As String
            Return "Test lives in a namespace!"
        End Function

    End Class

End Namespace

Ejemplo 2

La siguiente aplicación usa la biblioteca que se definió anteriormente. El tipo que se declara fuera de un espacio de nombres se crea cuando el nombre Test no está calificado con un espacio de nombres. Para acceder al tipo Test que se declara dentro de un espacio de nombres, se requiere el nombre del espacio de nombres.

public class MainHolder
{
    public static void Main1050()
    {
        Test t1 = new Test();
        Console.WriteLine(t1.ToString());

        ca1050.Test t2 = new ca1050.Test();
        Console.WriteLine(t2.ToString());
    }
}
Public Class MainHolder

    Public Shared Sub Main1050()
        Dim t1 As New Test()
        Console.WriteLine(t1.ToString())

        Dim t2 As New ca1050.Test()
        Console.WriteLine(t2.ToString())
    End Sub

End Class