Compartilhar via


CA1050: Declarar tipos em namespaces

Property Valor
ID da regra CA1050
Título Declarar tipos em namespaces
Categoria Projetar
Correção interruptiva ou sem interrupção Quebra
Habilitado por padrão no .NET 8 Como sugestão

Causa

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

Descrição da regra

Tipos são declarados em namespaces para evitar conflitos de nome e são uma maneira de organizar tipos relacionados em uma hierarquia de objetos. Os tipos 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, isso pode se feito com segurança quando o assembly nunca será usado junto com outros assemblies.

Suprimir um aviso

Para suprimir apenas uma violação, adicione diretivas de pré-processador ao arquivo de origem a fim de desabilitar e, em seguida, reabilitar 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 em um arquivo, uma pasta ou um projeto, defina a 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 com 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 definida anteriormente. O tipo declarado fora de um namespace é criado quando o nome Test não é qualificado por um namespace. Para acessar o tipo Test declarado dentro de um namespace, o 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