C# - Classi e oggetti in C#
Definizione di una classe
• Per definire di una classe:
class nome_classe
{
// corpo della classe
// contiene proprietà e metodi
}
Creazione di oggetti
• Creare un oggetto dalla classe:
nome_classe identificatore_oggetto = new nome_classe();
• In questo caso è stato utilizzato il costruttore predefinito, senza parametri.
Costruttore e distruttore della classe
• Il costruttore della classe è un metodo speciale che ha lo stesso nome della classe. Viene eseguito ogni volta che viene istanziato un oggetto.
• Possono esserci più costruttori per una classe: quello predefinito non accetta parametri; eventuali altri costruttori accettano parametri diversi tra loro per il tipo e/o la quantità. Questo concetto si chiama ‘overload dei costruttori’.
• Anche il costruttore può essere public o private; se si lascia per esempio un solo costruttore public con parametri, si può obbligare il programmatore ad utilizzare solo quello.
• Aggiungere codice per il costruttore della classe:
public nome_classe()
{
// corpo del costruttore
}
• Aggiungere codice per il distruttore della classe:
~nome_classe()
{
// corpo del distruttore
}
• Generalmente non è necessario scrivere codice per il distruttore.
Classi parziali
• Le classi parziali sono classi il cui codice viene spezzato su più file.
• Per realizzare una classe parziale basta aggiungere la parola chiave ‘parzial’.
• In un file:
parzial class MyClass
{
...
}
• In un altro file:
parzial class MyClass
{
...
}
Esempio: classe Point con diverse sintassi
• Esempio di definizione della classe ‘Point’:
class Point
{
public int x;
public int y;
}
• Definizione della stessa classe, ma ora vengono salvate le proprietà in variabili locali:
class Point
{
int _x;
int _y;
public int x
{
get { return _x; }
set { _x = value; }
}
public int y
{
get { return _y; }
set { _y = value; }
}
}
• Da C# 3.0, la sintassi precedente può essere abbreviata con la seguente (il compilatore provvede in questo caso a definire autonomamente anche la variabile privata):
class Point
{
public int x { get; set; }
public int y { get; set; }
}
• Creazione di due oggetti:
Point StartPoint = new Point();
Point EndPoint = new Point();
Esempio: classe Circle
• Esempio di definizione della classe ‘Circle’ con una proprietà e due metodi:
class Circle
{
public double radius;
public double GetArea()
{
return System.Math.PI * radius * radius;
}
public double GetCirconf()
{
return System.Math.PI * 2 * radius;
}
}
• Utilizzo della classe ‘Circle’:
Circle c1 = new Circle();
c1.radius = 3;
System.Console.WriteLine(c1.GetArea());
System.Console.WriteLine(c1.GetCirconf());
System.Console.ReadLine();
Classe con più costruttori
• Una classe può avere nessuno, uno o più costruttori.
• Non è necessario scrivere il codice per un costruttore: se non scritto esplicitamente, C# ne fornisce uno internamente senza parametri.
• I vari costruttori devono differire nella 'firma' (cioè nella quantità e nel tipo di parametri).
• Un costruttore può chiamare il codice di un altro costruttore, come nell'esempio seguente.
class Persona
{
string _nome;
string _cognome;
// Proprietà.
public string Nome
{
get { return _nome; }
set { _nome = value; }
}
public string Cognome
{
get { return _cognome; }
set { _cognome = value; }
}
// Costruttore 1.
public Persona(string nome, string cognome)
{
_nome = nome;
_cognome = cognome;
}
// Costruttore 2.
public Persona() : this("Nessun nome", "Nessun cognome")
{
}
}
• Come si vede, il secondo costruttore richiama il codice del primo costruttore.