CA1050: Declarar tipos em namespaces
TypeName |
DeclareTypesInNamespaces |
CheckId |
CA1050 |
<strong>Categoria</strong> |
Microsoft.design |
Alteração significativa |
Quebrando |
Causa
Um tipo de público ou protegido está definido fora do escopo de um namespace nomeado.
Descrição da regra
Tipos são declarados nos namespaces para evitar conflitos de nome e, como uma forma de organizar os tipos relacionados em uma hierarquia de objeto. São de tipos que estão fora de qualquer namespace nomeado em um namespace global que não pode ser referenciado no código.
Como corrigir violações
Para corrigir uma violação desta regra, coloque o tipo em um namespace.
Quando suprimir avisos
Embora você nunca tenha suprimir um aviso da regra, é seguro fazer isso quando o assembly nunca será usado junto com outros assemblies.
Exemplo
O exemplo a seguir mostra uma biblioteca de um tipo incorretamente declarado fora de um espaço para nome e um tipo que tem o mesmo nome declarado em um namespace.
Imports System
' 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 GoodSpace
Public Class Test
Public Overrides Function ToString() As String
Return "Test lives in a namespace!"
End Function
End Class
End Namespace
using System;
// Violates rule: DeclareTypesInNamespaces.
public class Test
{
public override string ToString()
{
return "Test does not live in a namespace!";
}
}
namespace GoodSpace
{
public class Test
{
public override string ToString()
{
return "Test lives in a namespace!";
}
}
}
O aplicativo a seguir usa a biblioteca que foi definida anteriormente. Observe que o tipo que é declarado fora de um espaço para nome é criado quando o nome Test não está qualificada por namespace. Observe também que para acessar o Test tipo de Goodspace, o nome do namespace é necessário.
Imports System
Namespace ApplicationTester
Public Class MainHolder
Public Shared Sub Main()
Dim t1 As New Test()
Console.WriteLine(t1.ToString())
Dim t2 As New GoodSpace.Test()
Console.WriteLine(t2.ToString())
End Sub
End Class
End Namespace
using System;
namespace ApplicationTester
{
public class MainHolder
{
public static void Main()
{
Test t1 = new Test();
Console.WriteLine(t1.ToString());
GoodSpace.Test t2 = new GoodSpace.Test();
Console.WriteLine(t2.ToString());
}
}
}