namespace

La parola chiave namespace è usata per dichiarare un ambito che contiene un set di oggetti correlati. È possibile usare uno spazio dei nomi per organizzare gli elementi di codice e creare tipi univoci globali.

namespace SampleNamespace
{
    class SampleClass { }

    interface ISampleInterface { }

    struct SampleStruct { }

    enum SampleEnum { a, b }

    delegate void SampleDelegate(int i);

    namespace Nested
    {
        class SampleClass2 { }
    }
}

Le dichiarazioni dello spazio dei nomi con ambito file consentono di dichiarare che tutti i tipi in un file si trovano in un unico spazio dei nomi. Le dichiarazioni dello spazio dei nomi con ambito file sono disponibili in C# 10. L'esempio seguente è simile a quello precedente, ma usa una dichiarazione dello spazio dei nomi con ambito file:

using System;

namespace SampleFileScopedNamespace;

class SampleClass { }

interface ISampleInterface { }

struct SampleStruct { }

enum SampleEnum { a, b }

delegate void SampleDelegate(int i);

L'esempio precedente non include uno spazio dei nomi annidato. Gli spazi dei nomi con ambito file non possono includere dichiarazioni di spazio dei nomi aggiuntive. Non è possibile dichiarare uno spazio dei nomi annidato o un secondo spazio dei nomi con ambito file:

namespace SampleNamespace;

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

namespace AnotherNamespace; // Not allowed!

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

All'interno di uno spazio dei nomi è possibile dichiarare nessuno o più di uno dei tipi elencati di seguito:

Il compilatore aggiunge uno spazio dei nomi predefinito. Questo spazio dei nomi senza nome, talvolta chiamato spazio dei nomi globale, è presente in ogni file. Contiene dichiarazioni non incluse in uno spazio dei nomi dichiarato. Qualsiasi identificatore nello spazio dei nomi globale può essere usato all'interno di uno spazio dei nomi denominato.

Gli spazi dei nomi hanno accesso pubblico in modo implicito. Per informazioni sui modificatori di accesso che è possibile assegnare agli elementi all'interno di uno spazio dei nomi, vedere Modificatori di accesso.

È possibile definire uno spazio dei nomi in due o più dichiarazioni. L'esempio seguente definisce due classi come parte dello spazio dei nomi MyCompany:

namespace MyCompany.Proj1
{
    class MyClass
    {
    }
}

namespace MyCompany.Proj1
{
    class MyClass1
    {
    }
}

L'esempio seguente illustra come chiamare un metodo statico in uno spazio dei nomi annidato.

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

Specifiche del linguaggio C#

Per altre informazioni, vedere la sezione Spazi dei nomi della specifica del linguaggio C#. Per altre informazioni sulle dichiarazioni dello spazio dei nomi con ambito file, vedere la specifica della funzionalità.

Vedi anche