Partilhar via


A palavra-chave namespace

Use a namespace palavra-chave para declarar um âmbito que contenha um conjunto de objetos relacionados. Use um namespace para organizar elementos de código e criar tipos globalmente únicos.

namespace SampleNamespace
{
    class SampleClass { }

    interface ISampleInterface { }

    struct SampleStruct { }

    enum SampleEnum { a, b }

    delegate void SampleDelegate(int i);

    namespace Nested
    {
        class SampleClass2 { }
    }
}

As declarações de namespace com escopo de arquivo permitem que você declare que todos os tipos em um arquivo estão em um único namespace. O exemplo seguinte é semelhante ao anterior, mas utiliza uma declaração de namespace com escopo de ficheiro:

using System;

namespace SampleFileScopedNamespace;

class SampleClass { }

interface ISampleInterface { }

struct SampleStruct { }

enum SampleEnum { a, b }

delegate void SampleDelegate(int i);

A referência da linguagem C# documenta a versão mais recentemente lançada da linguagem C#. Contém também documentação inicial para funcionalidades em versões preliminares públicas para a próxima versão da linguagem.

A documentação identifica qualquer funcionalidade introduzida pela primeira vez nas últimas três versões da língua ou em pré-visualizações públicas atuais.

Sugestão

Para saber quando uma funcionalidade foi introduzida pela primeira vez em C#, consulte o artigo sobre o histórico de versões da linguagem C#.

Utilização de instruções em espaços de nomes com âmbito de ficheiro

Quando você usa namespaces com escopo de arquivo, o posicionamento de using instruções afeta seu escopo dentro do arquivo. Namespaces com escopo de arquivo inferiores à declaração de namespace tradicional equivalente que termina com um colchete de fechamento no final do arquivo. Esse comportamento determina onde using as diretivas são aplicadas da seguinte maneira:

  • Se colocares as using instruções antes da declaração do namespace com escopo de ficheiro, são tratadas como estando fora do namespace e interpretadas como namespaces totalmente qualificados.
  • Se colocares as using instruções depois da declaração do namespace com âmbito de ficheiro, elas são escopadas dentro do próprio namespace.

Por exemplo:

// This using is outside the namespace scope, so it applies globally
using System;

namespace SampleNamespace; // File-scoped namespace declaration

// This using is inside the namespace scope
using System.Text;

public class SampleClass
{
    // Class members...
}

No exemplo anterior, System é globalmente acessível, enquanto System.Text se aplica apenas dentro SampleNamespace.

O exemplo anterior não inclui um namespace aninhado. Os namespaces com escopo de arquivo não podem incluir mais declarações de namespace. Não é possível declarar um namespace aninhado ou um segundo namespace com escopo de arquivo:

namespace SampleNamespace;

class AnotherSampleClass
{
    public void AnotherSampleMethod()
    {
        System.Console.WriteLine(
            "SampleMethod inside SampleNamespace");
    }
}

namespace AnotherNamespace; // Not allowed!

namespace ANestedNamespace // Not allowed!
{
   // declarations...
}

Dentro de um namespace, você pode declarar zero ou mais dos seguintes tipos:

O compilador adiciona um namespace padrão. Esse namespace sem nome, às vezes chamado de namespace global, está presente em todos os arquivos. Ele contém declarações não incluídas em um namespace declarado. Qualquer identificador no namespace global está disponível para uso em um namespace nomeado.

Os namespaces têm implicitamente acesso público. Para obter uma discussão sobre os modificadores de acesso que você pode atribuir a elementos em um namespace, consulte Modificadores de acesso.

É possível definir um namespace em duas ou mais declarações. Por exemplo, o exemplo a seguir define duas classes como parte do MyCompany namespace:

namespace MyCompany.Proj1
{
    class MyClass
    {
    }
}

namespace MyCompany.Proj1
{
    class MyClass1
    {
    }
}

O exemplo a seguir mostra como chamar um método estático em um namespace aninhado.

namespace SomeNameSpace
{
    public class MyClass
    {
        static void Main()
        {
            Nested.NestedNameSpaceClass.SayHello();
        }
    }

    // a nested namespace
    namespace Nested
    {
        public class NestedNameSpaceClass
        {
            public static void SayHello()
            {
                Console.WriteLine("Hello");
            }
        }
    }
}
// Output: Hello

Especificação da linguagem C#

Para obter mais informações, consulte a seção Namespaces da especificação da linguagem C#. Para obter mais informações sobre declarações de namespace com escopo de arquivo, consulte a especificação do recurso.

Consulte também