In questo capitolo si presuppone che il lettore abbia delle conoscenza di programmazione ad oggetti, per cui eventualmente rimando il lettore meno esperto al manuale di ingegneria del software in cui parlo di programmazione ad oggetti.
Possiamo creare dei tipi riferimento, composti da elementi detti membri mediante la definizione di una classe. Le classi forniscono dei 'templates' da cui possono essere generate delle istanze.
Dichiarare una classe
La dichiarazione di una classe viene fatta mediante la parola chiave class e può contenere fino a quattro parti
attributi
modificatori
classi base
corpo
Nel corpo vengono specificati i membri della classe.
public class NomeClasse
{ // corpo della classe
}
Vediamo adesso le altre parti.
Attributi
Gli attributi possono essere inseriti all'inizio della dichiarazione della classe. Sono i tipi definiti dall'utente per la classe.
Possono essere richiamati all'interno dela classe tramite il riferimento 'this'.
public class NomeClasse
{ private int myNum; // corpo della classe
}
Modificatori
Ci sono sette tipi diversi di modificatori (opzionali) di classe.
Quattro di questi: 'public', 'internal', 'protected' e 'private' sono utilizzati per specificare il livello di accesso.
public
La parola chiave 'public' specifica un tipo come completamente accessibile da tutti gli altri tipi.
internal
i tipi che definisce sono accessibili soltanto nello stesso assembly
protected
i suoi tipi sono accessibili solo dai tipi che la contengono.
private
l'accesso ai tipi è limitato esclusivamente ai tipi che la contengono.
Strutture
Una struttura è un tipo definito dall'utente. Viene dichiarato in una maniera simile a quella dele classi, ad eccezione del fatto che non eredita da nessuna classe e nessuna classe può ereditare da essa.
Vediamo un esempio in cui dichiariamo una struttura che un contatto e-mail/telefonico.
struct Contatto
{ public string nome; public string cognome; public string telefono; public string email;
Namespaces si possono immaginare come delle collezioni di classi. Forniscono un modo per per raggrupparle in una struttura gerarchica.
Vediamo un esempio pratico:
Il namespace System.Data.SqlClient, contiene le classi per la gestione dei database SQL.
Abbiamo ad esempio la classe: System.Data.SqlClient.SqlCommand
Facciamo riferimento ad un namespace mediante la parola chiave using inserita prima di qualsiasi dichiarzione della classe.
Ad esempio vediamo una classe che getisce una connessione al database.
using System; using System.Data; using System.Data.SqlClient; namespace GestioneDatabase
{ public class clDBTools
{ public clDBTools()
{ //costruttore
}
public void Connessione(SqlConnection conn, SqlCommand cmd)
{ if (conn.State == ConnectionState.Closed)
conn.Open();
cmd.Connection = conn;
}
}
}
all'interno della classe, una volta dichiarato il namespace, possiamo riferirci alla classe 'System.Data.SqlClient.SqlConnection' semplicemente con il nome di 'SqlConnection' oppure utilizzando il suo nome completo.