class (Riferimenti per C#)
Le classi vengono dichiarate usando la parola chiave class
, come illustrato nell'esempio seguente:
class TestClass
{
// Methods, properties, fields, events, delegates
// and nested classes go here.
}
Osservazioni:
In C# è consentita solo l'eredità singola. In altre parole, una classe può ereditare l'implementazione solo da una classe di base singola. Una classe può tuttavia implementare più di un'interfaccia. La tabella seguente illustra esempi di ereditarietà di classi e di implementazione di interfacce:
Ereditarietà | Esempio |
---|---|
None | class ClassA { } |
Singola | class DerivedClass : BaseClass { } |
Nessuna, implementa due interfacce | class ImplClass : IFace1, IFace2 { } |
Singola, implementa una sola interfaccia | class ImplDerivedClass : BaseClass, IFace1 { } |
Una classe dichiarata direttamente all'interno di uno spazio dei nomi, non annidata all'interno di altre classi, può essere public o internal. Le classi sono internal
per impostazione predefinita.
I membri di classe, incluse le classi annidate, possono essere public, protected internal, protected, internal, private o private protected. I membri sono private
per impostazione predefinita.
Per altre informazioni, vedere Modificatori di accesso.
È possibile dichiarare classi generiche che hanno parametri di tipo. Per altre informazioni, vedere Generic Classes (Classi generiche).
Una classe può contenere dichiarazioni dei membri seguenti:
Esempio
L'esempio seguente illustra la dichiarazione di campi di classe, costruttori e metodi. Illustra anche la creazione di istanze di oggetti e la stampa dei dati di istanza. In questo esempio vengono dichiarate due classi. La prima classe Child
, contiene due campi privati (name
e age
), due costruttori pubblici e un metodo pubblico. La seconda classe, StringTest
, viene usata per contenere Main
.
class Child
{
private int age;
private string name;
// Default constructor:
public Child()
{
name = "N/A";
}
// Constructor:
public Child(string name, int age)
{
this.name = name;
this.age = age;
}
// Printing method:
public void PrintChild()
{
Console.WriteLine("{0}, {1} years old.", name, age);
}
}
class StringTest
{
static void Main()
{
// Create objects by using the new operator:
Child child1 = new Child("Craig", 11);
Child child2 = new Child("Sally", 10);
// Create an object using the default constructor:
Child child3 = new Child();
// Display results:
Console.Write("Child #1: ");
child1.PrintChild();
Console.Write("Child #2: ");
child2.PrintChild();
Console.Write("Child #3: ");
child3.PrintChild();
}
}
/* Output:
Child #1: Craig, 11 years old.
Child #2: Sally, 10 years old.
Child #3: N/A, 0 years old.
*/
Commenti
Si noti che, nell'esempio precedente, i campi privati (name
e age
) sono accessibili solo tramite i metodi pubblici della classe Child
. Ad esempio, non è possibile stampare il nome del figlio, dal metodo Main
, usando un'istruzione simile alla seguente:
Console.Write(child1.name); // Error
L'accesso ai membri private di Child
da Main
sarebbe possibile solo se Main
fosse un membro della classe.
I tipi dichiarati all'interno di una classe senza un modificatore di accesso vengono impostati automaticamente a private
; in tal modo i membri dei dati in questo esempio sarebbero sempre private
, anche se la parola chiave venisse rimossa.
Infine, si noti che per l'oggetto creato usando il costruttore senza parametri (child3
), il campo age
è stato inizializzato su zero per impostazione predefinita.
Specifiche del linguaggio C#
Per altre informazioni, vedere la specifica del linguaggio C#. La specifica del linguaggio costituisce il riferimento ufficiale principale per la sintassi e l'uso di C#.