Partilhar via


espaço de nomes

A namespace palavra-chave é usada para declarar um escopo que contém um conjunto de objetos relacionados. Você pode usar um namespace para organizar elementos de código e criar tipos globalmente exclusivos.

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. As declarações de namespace com escopo de arquivo estão disponíveis com C# 10. O exemplo a seguir é semelhante ao exemplo anterior, mas usa uma declaração de namespace com escopo de arquivo:

using System;

namespace SampleFileScopedNamespace;

class SampleClass { }

interface ISampleInterface { }

struct SampleStruct { }

enum SampleEnum { a, b }

delegate void SampleDelegate(int i);

Usando instruções em namespaces com escopo de arquivo

Ao usar 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 as using instruções forem colocadas antes da declaração de namespace com escopo de arquivo, elas serão tratadas como estando fora do namespace e serão interpretadas como namespaces totalmente qualificados.
  • Se as using instruções forem colocadas após a declaração de namespace com escopo de arquivo, elas terão escopo 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 acima, System é globalmente acessível, enquanto System.Text se aplica apenas dentro SampleNamespacedo .

O exemplo anterior não inclui um namespace aninhado. Os namespaces com escopo de arquivo não podem incluir declarações de namespace adicionais. 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