Partilhar via


CA1050: Declarar tipos em namespaces

Property valor
ID da regra CA1050
Título Declarar tipos em namespaces
Categoria Desenho
A correção está quebrando ou não quebrando Quebrando
Habilitado por padrão no .NET 8 Como sugestão

Motivo

Um tipo público ou protegido é definido fora do escopo de um namespace nomeado.

Descrição da regra

Os tipos são declarados em namespaces para evitar colisões de nomes e como uma maneira de organizar tipos relacionados em uma hierarquia de objetos. Os tipos que estão fora de qualquer namespace nomeado estão em um namespace global que não pode ser referenciado no código.

Como corrigir violações

Para corrigir uma violação dessa regra, coloque o tipo em um namespace.

Quando suprimir avisos

Embora você nunca precise suprimir um aviso dessa regra, é seguro fazer isso quando o assembly nunca será usado junto com outros assemblies.

Suprimir um aviso

Se você quiser apenas suprimir uma única violação, adicione diretivas de pré-processador ao seu arquivo de origem para desativar e, em seguida, reativar a regra.

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

Para desabilitar a regra para um arquivo, pasta ou projeto, defina sua severidade como none no arquivo de configuração.

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

Para obter mais informações, consulte Como suprimir avisos de análise de código.

Exemplo 1

O exemplo a seguir mostra uma biblioteca que tem um tipo declarado incorretamente fora de um namespace e um tipo que tem o mesmo nome declarado em um namespace.

// 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

Exemplo 2

O aplicativo a seguir usa a biblioteca que foi definida anteriormente. O tipo declarado fora de um namespace é criado quando o nome Test não é qualificado por um namespace. Para acessar o tipo declarado dentro de um namespace, o Test nome do namespace é necessário.

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