static (Riferimenti per C#)

Utilizzare il modificatore static per dichiarare un membro statico che appartiene al tipo stesso anziché a un oggetto specifico.Il modificatore static può essere utilizzato con classi, campi, metodi, proprietà, operatori, eventi e costruttori, ma non con indicizzatori, distruttori o tipi che non sono classi.Per ulteriori informazioni, vedere Classi statiche e membri di classi statiche (Guida per programmatori C#).

Esempio

La classe seguente viene dichiarata come static e contiene soltanto metodi static:

    static class CompanyEmployee
    {
        public static void DoSomething() { /*...*/ }
        public static void DoSomethingElse() { /*...*/  }
    }

Una dichiarazione di costanti o di tipi è in modo implicito un membro static.

Non è possibile fare riferimento a un membro static mediante un'istanza.È invece possibile ottenere il risultato desiderato utilizzando il nome del tipo in cui è dichiarato.Si consideri ad esempio la seguente classe:

    public class MyBaseC
    {
        public struct MyStruct
        {
            public static int x = 100;
        }
    }

Per fare riferimento al membro statico x, utilizzare il nome completo, MyBaseC.MyStruct.x, a meno che il membro non sia accessibile dallo stesso ambito:

Console.WriteLine(MyBaseC.MyStruct.x);

Mentre l'istanza di una classe contiene una copia distinta di tutti i campi di istanza della classe, esiste una sola copia per ciascun campo static.

Non è possibile utilizzare this per fare riferimento a metodi statici o a funzioni di accesso della proprietà statiche.

Se la parola chiave static viene applicata a una classe, tutti i membri della classe devono essere statici.

Le classi e le classi statiche potrebbero avere costruttori statici.I costruttori statici vengono chiamati in un determinato momento compreso tra l'avvio del programma e la creazione di un'istanza della classe.

[!NOTA]

La parola chiave static ha un utilizzo limitato rispetto a C++.Per un confronto con la corrispondente parola chiave di C++, vedere Statica (C++).

Per illustrare le caratteristiche dei membri statici, si consideri una classe che rappresenta un dipendente di un'azienda.Si supponga che la classe contenga un metodo per conteggiare i dipendenti e un campo per memorizzarne il numero.Sia il metodo che il campo non appartengono ad alcuna istanza di tipo dipendente,in quanto appartengono alla classe aziendae devono pertanto essere dichiarati come membri static della classe.

In questo esempio si leggono il nome e l'identificatore di un nuovo dipendente; il contatore di dipendenti viene quindi incrementato di un'unità e vengono visualizzate le informazioni relative al nuovo dipendente e al numero di dipendenti aggiornato.Per semplicità, questo programma legge il numero attuale di dipendenti dalla tastiera.In un'applicazione reale, queste informazioni verrebbero lette da un file.

    public class Employee4
{
    public string id;
    public string name;

    public Employee4()
    {
    }

    public Employee4(string name, string id)
    {
        this.name = name;
        this.id = id;
    }

    public static int employeeCounter;

    public static int AddEmployee()
    {
        return ++employeeCounter;
    }
}

class MainClass : Employee4
{
    static void Main()
    {
        Console.Write("Enter the employee's name: ");
        string name = Console.ReadLine();
        Console.Write("Enter the employee's ID: ");
        string id = Console.ReadLine();

        // Create and configure the employee object:
        Employee4 e = new Employee4(name, id);
        Console.Write("Enter the current number of employees: ");
        string n = Console.ReadLine();
        Employee4.employeeCounter = Int32.Parse(n);
        Employee4.AddEmployee();

        // Display the new information:
        Console.WriteLine("Name: {0}", e.name);
        Console.WriteLine("ID:   {0}", e.id);
        Console.WriteLine("New Number of Employees: {0}",
                      Employee4.employeeCounter);
    }
}
    /*
    Input:
    Matthias Berndt
    AF643G
    15
    Sample Output:
    Enter the employee's name: Matthias Berndt
    Enter the employee's ID: AF643G
    Enter the current number of employees: 15
    Name: Matthias Berndt
    ID:   AF643G
    New Number of Employees: 16
    */

In questo esempio viene mostrato che, sebbene sia possibile inizializzare un campo statico tramite un altro campo statico non ancora dichiarato, i risultati non saranno definiti finché non verrà assegnato un valore al campo statico in modo esplicito.

class Test
{
   static int x = y;
   static int y = 5;

   static void Main()
   {
      Console.WriteLine(Test.x);
      Console.WriteLine(Test.y);

      Test.x = 99;
      Console.WriteLine(Test.x);
   }
}
/*
Output:
    0
    5
    99
*/

Specifiche del linguaggio C#

Per ulteriori informazioni, vedere la Specifiche del linguaggio C#. La specifica del linguaggio è la fonte ufficiale per la sintassi e l'utilizzo di C#.

Vedere anche

Riferimenti

Parole chiave di C#

Modificatori (Riferimenti per C#)

Classi statiche e membri di classi statiche (Guida per programmatori C#)

Concetti

Guida per programmatori C#

Altre risorse

Riferimenti per C#