namespace

A palavra-chave namespace é 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 em escopo de arquivo permitem declarar 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 o C# 10. O exemplo a seguir é semelhante ao exemplo anterior, mas usa uma declaração de namespace em escopo de arquivo:

using System;

namespace SampleFileScopedNamespace;

class SampleClass { }

interface ISampleInterface { }

struct SampleStruct { }

enum SampleEnum { a, b }

delegate void SampleDelegate(int i);

O exemplo anterior não inclui um namespace aninhado. Namespaces com escopo de arquivo não podem incluir declarações de namespace adicionais. Você não pode 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, é possível declarar zero ou mais dos seguintes tipos:

O compilador adiciona um namespace padrão. Este 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 acesso público implicitamente. Para 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 namespace MyCompany:

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 saber mais, confira 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.

Confira também