Compartilhar via


CA1050: Declarar tipos em namespaces

TypeName

DeclareTypesInNamespaces

CheckId

CA1050

Category (Categoria)

Microsoft.Design

Alteração Significativa

Quebra

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.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 de esta regra, coloque o tipo em um namespace.

Quando Suprimir Alertas

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

Exemplo

O exemplo a seguir mostra uma biblioteca que contém um tipo declarado incorretamente fora de um namespace, e um tipo que com 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 namespace é criado quando o nome Test não é qualificado por um namespace.Observe também que para acessar Test em 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());
        }
    }
}