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 9 | 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 de um arquivo, pasta ou projeto, defina sua gravidade 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 Test
tipo 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