Declarar namespaces para organizar tipos

Os namespaces são usados intensamente em programações de C# de duas maneiras. Em primeiro lugar, o .NET usa namespaces para organizar suas muitas classes, da seguinte maneira:

System.Console.WriteLine("Hello World!");

System é um namespace e Console é uma classe nesse namespace. A palavra-chave using pode ser usada para que o nome completo não seja necessário, como no exemplo a seguir:

using System;
Console.WriteLine("Hello World!");

Para saber mais, confira Diretiva using.

Importante

Os modelos C# para o .NET 6 usam instruções de nível superior. Se você já tiver atualizado para o .NET 6, talvez seu aplicativo não corresponda ao código descrito neste artigo. Para obter mais informações, consulte o artigo sobre Novos modelos C# geram instruções de nível superior

O SDK do .NET 6 também adiciona um conjunto de diretivas implícitasglobal using para projetos que usam os seguintes SDKs:

  • Microsoft.NET.Sdk
  • Microsoft.NET.Sdk.Web
  • Microsoft.NET.Sdk.Worker

Essas diretivas implícitas global using incluem os namespaces mais comuns para o tipo de projeto.

Para obter mais informações, consulte o artigo sobre Diretivas de uso implícito

Em segundo lugar, declarar seus próprios namespaces pode ajudar a controlar o escopo dos nomes de classe e de método em projetos de programação maiores. Use a palavra-chave namespace para declarar um namespace, como no exemplo a seguir:

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

O nome do namespace deve ser um nome do identificador válido em C#.

A partir do C# 10, você pode declarar um namespace para todos os tipos definidos nesse arquivo, como mostra o exemplo a seguir:

namespace SampleNamespace;

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

A vantagem dessa nova sintaxe é que ela é mais simples, economizando espaço horizontal e chaves. Isso facilita a leitura do seu código.

Visão geral dos namespaces

Os namespaces têm as seguintes propriedades:

  • Eles organizam projetos de códigos grandes.
  • Eles são delimitados com o uso do operador ..
  • A diretiva using elimina a necessidade de especificar o nome do namespace para cada classe.
  • O namespace global é o namespace "raiz": global::System sempre fará referência ao namespace do .NET System.

Especificação da linguagem C#

Para saber mais, confira a seção Namespaces da Especificação da linguagem C#.