Condividi tramite


Classi (Guida per programmatori C#)

Una classe è il tipo di dati più potente in C#. Analogamente alle strutture, una classe definisce i dati e il comportamento del tipo di dati. I programmatori possono quindi creare oggetti che sono istanze della classe. A differenza delle strutture, le classi supportano l'ereditarietà, una componente fondamentale della programmazione orientata ad oggetti. Per ulteriori informazioni, vedere Ereditarietà.

Dichiarazioni di classi

Per la definizione delle classi viene utilizzata la parola chiave class, come illustrato nell'esempio seguente:

public class Customer
{
    //Fields, properties, methods and events go here...
}

La parola chiave class è preceduta dal livello di accesso. In questo caso viene utilizzato public, quindi qualsiasi utente può creare oggetti da questa classe. Il nome della classe segue la parola chiave class. Il resto della definizione è costituito dal corpo della classe, in cui vengono definiti il comportamento e i dati. I campi, le proprietà, i metodi e gli eventi di una classe vengono collettivamente definiti membri della classe.

Creazione di oggetti

Anche se a volte vengono utilizzati in modo interscambiabile, classi e oggetti sono differenti. Una classe definisce un tipo di oggetto, ma non l'oggetto stesso. Un oggetto è un'entità concreta basata su una classe e viene a volte definito istanza di una classe.

Gli oggetti possono essere creati utilizzando la parola chiave new seguita dal nome della classe su cui sarà basato l'oggetto, come illustrato di seguito:

Customer object1 = new Customer();

Quando viene creata un'istanza di una classe, al programmatore viene restituito un riferimento all'oggetto. Nell'esempio precedente object1 è un riferimento a un oggetto basato su Customer. Fa riferimento al nuovo oggetto, ma non contiene i dati dell'oggetto stesso. In realtà è possibile creare un riferimento a un oggetto anche senza creare l'oggetto:

Customer object2;

Non è consigliabile creare riferimenti a oggetti come questo che non fanno riferimento a un oggetto, perché il tentativo di accedere a un oggetto tramite tale riferimento genererà un errore in fase di esecuzione. È tuttavia possibile creare un riferimento a un oggetto, creando un nuovo oggetto oppure assegnandolo a un oggetto esistente, come illustrato di seguito:

Customer object3 = new Customer();
Customer object4 = object3;

Con questo codice vengono creati due riferimenti allo stesso oggetto. Pertanto le modifiche effettuate all'oggetto tramite object3 si rifletteranno nei successivi utilizzi di object4, perché agli oggetti basati su classi viene fatto riferimento mediante riferimento, in quanto le classi sono note come tipi di riferimento.

Ereditarietà delle classi

L'ereditarietà si ottiene tramite l'utilizzo di una derivazione, ossia una classe viene dichiarata mediante una classe base da cui eredita dati e comportamenti. Una classe base viene specificata aggiungendo un segno di due punti e il nome della classe base dopo il nome della classe derivata, come illustrato di seguito:

public class Manager : Employee
{
    // Employee fields, properties, methods and events are inherited
    // New Manager fields, properties, methods and events go here...
}

Quando una classe dichiara una classe base, anche tutti i membri di quest'ultima diventano parte della nuova classe. Poiché anche una classe base può ereditare da un'altra classe, che a sua volta ha ereditato da un'altra classe e così via, alla fine una classe può avere numerose classi base.

Esempio

Nell'esempio riportato di seguito viene definita una classe pubblica, contenente un unico campo, un metodo e un metodo speciale denominato costruttore. Per ulteriori informazioni, vedere Costruttori. Viene quindi creata un'istanza di questa classe con la parola chiave new.

public class Person
{
    // Field
    public string name;

    // Constructor
    public Person()
    {
        name = "unknown";
    }

    // Method
    public void SetName(string newName)
    {
        name = newName;
    }
}
class TestPerson
{
    static void Main()
    {
        Person person1 = new Person();
        System.Console.WriteLine(person1.name);

        person1.SetName("John Smith");
        System.Console.WriteLine(person1.name);
    }
}

Output

unknown

John Smith

Cenni preliminari sulle classi

Di seguito sono riportate le caratteristiche principali delle classi:

  • A differenza di C++, è supportata solo l'ereditarietà singola. In altri termini, una classe può ereditare l'implementazione da una sola classe base.

  • Una classe può implementare più interfacce. Per ulteriori informazioni, vedere Interfacce.

  • Le definizioni di classe possono essere suddivise tra file di origine differenti. Per ulteriori informazioni, vedere Definizioni parziali di classi.

  • Le classi statiche sono classi sealed contenenti solo metodi statici. Per ulteriori informazioni, vedere Classi statiche e membri di classi statiche.

Specifiche del linguaggio C#

Per ulteriori informazioni, vedere le sezioni riportate di seguito in Specifiche del linguaggio C#:

  • 1.6 Classi e oggetti

  • 10 Classi

Vedere anche

Riferimenti

Membri (Guida per programmatori C#)
Metodi (Guida per programmatori C#)
Distruttori (Guida per programmatori C#)
Oggetti (Guida per programmatori C#)

Concetti

Guida per programmatori C#

Altre risorse

Costruttori (Guida per programmatori C#)