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