class (Riferimenti per C#)
Per la dichiarazione delle classi viene utilizzata la parola chiave class, come illustrato nell'esempio seguente:
class TestClass
{
// Methods, properties, fields, events, delegates
// and nested classes go here.
}
Note
A differenza di C++, in C# è consentita solo l'ereditarietà singola. In altre parole, una classe può ereditare l'implementazione da una sola classe base. Una classe è tuttavia in grado di implementare più di un'interfaccia. Nella tabella che segue sono illustrati esempi di ereditarietà di classe e di implementazione di interfaccia.
Ereditarietà |
Esempio |
---|---|
Nessuna correzione |
class ClassA { } |
Single |
class DerivedClass: BaseClass { } |
Nessuna, implementa due interfacce |
class ImplClass: IFace1, IFace2 { } |
Singola, implementa un'interfaccia |
class ImplDerivedClass: BaseClass, IFace1 { } |
I livelli di accesso protected e private sono consentiti unicamente per classi annidate.
È inoltre possibile dichiarare classi generiche che dispongono di parametri di tipo. Per ulteriori informazioni, vedere Classi generiche.
Una classe può contenere dichiarazioni dei seguenti membri:
Esempio
Nell'esempio riportato di seguito viene illustrata la dichiarazione di costruttori, metodi e campi di classi. Viene inoltre descritta la creazione di istanze di oggetti e la stampa di dati di un'istanza. In questo esempio vengono dichiarate due classi, la classe Child, che contiene due campi privati (name e age) e due metodi pubblici. La seconda classe, StringTest, viene utilizzata 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, nell'esempio precedente, che è possibile accedere ai campi privati (name e age) solo tramite i metodi pubblici della classe Child. Non è quindi possibile stampare il nome del bambino dal metodo Main utilizzando un'istruzione come quella riportata di seguito.
Console.Write(child1.name); // Error
L'accesso ai membri privati di Child da Main è possibile solo se Main è un membro della classe.
I tipi dichiarati all'interno di una classe senza un modificatore di accesso per impostazione predefinita vengono impostati su private, quindi i membri dati di questo esempio sarebbero comunque private anche se la parola chiave venisse rimossa.
Si noti infine che per l'oggetto creato mediante il costruttore predefinito (child3), il campo dell'età è stato inizializzato su zero per impostazione predefinita.
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
Tipi di riferimento (Riferimenti per C#)