Le classi
Una struttura dati che definisce e mantiene lo stato e il comportamento in una singola unità. La creazione avviene mediante l’utilizzo della parola chiave class:
Se non specifichiamo niente la classe sarà visibile solo all’interno dell’assembly che la contiene, in questo caso il modificatore implicito è internal. L’opposto public consente la visibilità da parte di altri assembly.
Una classe può contenere:
- membri dati – campi e costanti;
- membri funzione – metodi, proprietà, eventi, indicizzatori, operatori, costruttori o distruttori;
Per poter accedere ai membri di una classe si utilizza l’operatore punto:
Campi e costanti
I campi sono variabili che appartengono a una classe e il suo ambito si estende al solo corpo della classe in cui vengono definiti, questo significa che implicitamente sono definiti come private. Per utilizzarli all’esterno dobbiamo definirli public, ma in questo caso non viene rispettata la regola dell’incapsulamanto.
Una costante è un campo il cui valore è predeterminato a tempo di compilazione. Le stringhe interpolate possono essere create anche per mezzo di costanti
Se la costante viene inizializzata in fase di esecuzione dobbiamo usare il modificatore readonly.
Metodi
Permettono di definire il comportamento di un oggetto, può ricevere dati in ingresso e restituire dati di output.
I metodi possono accedere agli altri membri della classe, per poter chiamare il metodo all’esterno della classe dovremmo specificare anche il nome dell’istanza
Si parla di overloading quando abbiamo più metodi con lo stesso nome ma con i parametri differenti per numero o tipo.
I parametri passati al metodo vengono passati per valore, possiamo decidere di passarli per riferimento anteponendo il modificatore ref. Se il parametro è un tipo di riferimento tutte le modifiche fatte all’interno del metodo si rifletteranno sull’oggetto che è stato utilizzato come parametro anche all’uscita dal metodo stesso.
Membri statici
Possiamo istanziare due oggetti Auto e ognuno ha dei valori diversi:
Possiamo avere la necessità di condividere alcuni membri fra tutte le istanze, in questo caso i membri devono avere la definizione static.
Il contatore delle auto viene incrementato ogni volta che viene istanzata, possiamo accedere al valore di questa variabile indicando anche il nome della classe:
Le proprietà
Permettono di implementare il meccanismo di incapsulamento, controllando le modalità di accesso ai campi privati di una classe tramite get (accesso in lettura) e set (accesso in scrittura, la parola chiave value contiene il valore assegnato alla proprietà).
Tipi nidificati
Una classe o struct definita all’interno di un’altra classe o struct è detta tipo nidificato, consente di realizzare un incapsulamento controllando il livello di visibità.
Inizializzatori di oggetti
La creazione di una istanza avviene tramite l’operatore new, possiamo passare i campi e le proprietà che vogliamo inizializzare e successivamente possiamo passare i paramentri
// la versione sarà base Auto autoFiesta = new Auto { Marca = “Ford”, Modello = “fiesta” };// la versione sarà quella indicata Auto autoEscort = new Auto(“ghia”) { Marca = “Ford”, Modello = “escort” }; |
Indicizzatori
Consentono di accedere agli oggetti come fossero array, nella proprietà this dobbiamo specificare il tipo di ritorno e il parametro da utilizzare come indice.
Struct
A differenza delle classi che sono tipi riferimento la struttura è un tipo valore. Le struct possono avere dei costruttori personalizzati con parametri. Una struttura può essere passata per riferimento utilizzando il modificatore ref.