Condividi tramite


Parola chiave 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. 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);

Uso di istruzioni negli spazi dei nomi con ambito file

Quando si usano spazi dei nomi con ambito file, il posizionamento delle istruzioni using influisce sul relativo ambito all'interno del file. Gli spazi dei nomi con ambito file sono inferiori alla dichiarazione dello spazio dei nomi tradizionale equivalente che termina con una parentesi chiusa alla fine del file. Questo comportamento determina dove using vengono applicate le direttive come segue:

  • Se le istruzioni using vengono inserite prima della dichiarazione di spazio dei nomi a livello di file, vengono considerate esterne allo spazio dei nomi e vengono interpretate come spazi dei nomi completamente qualificati.
  • Se le istruzioni using vengono posizionate dopo la dichiarazione dello spazio dei nomi con ambito file, esse sono considerate all'interno dello spazio dei nomi stesso.

Ad esempio:

// 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...
}

Nell'esempio precedente System è accessibile a livello globale, mentre System.Text si applica solo all'interno di SampleNamespace.

L'esempio precedente non include uno spazio dei nomi annidato. Gli spazi dei nomi con ambito file non possono includere altre dichiarazioni dello spazio dei nomi. Non è possibile dichiarare uno spazio dei nomi annidato o un secondo spazio dei nomi a livello di 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