12. 12
Oggetto vs Classe
Compile Time
Run Time
Mario
Studente.class
Identity=
1
Studente
Laura
Identity=
2
CLR
Stessa struttura, ma dati
diversi. Sono due diverse
istanze.
29. 29
Struttura di un progetto
Insieme di progetti
Cartella che contiene
le librerie
File .CS : contiene il codice C# di
una classe
Progetto: raccoglie classi che
realizzano il programma
30. 30
Ciao Corso
using System;
Indica dove prendere le librerie
usate
Metodo per raggruppare le
funzionalità
namespace CiaoCorso
{
Nome della classe
class Program
{
static void Main(string[] args)
{
// Scrive sulla console
System.Console.WriteLine("Ciao Corso");
// Aspettta che la persona digiti un carattere
System.Console.ReadKey();
}
}
}
Metodo speciale: punto di ingresso
dell’applicazione. Ogni applicazione
ne deve avere uno.
31. 31
Ciao Corso (2)
Commenti
// Scrive sulla console
System.Console.WriteLine("Ciao Corso");
// Aspettta che la persona digiti un carattere
System.Console.ReadKey();
Namespace
Oggetto
Metodo
32. 32
Strutture base: Cicli
Numero fisso di volte
for (int i = 0; i < length; i++)
{//fai qualcosa}
While:
while (condizione==true)
{ //fai qualcosa }
do{//fai qualcosa
} while (condizione== true);
Finche la condizione è vera il
ciclo continua
36. 36
Creare una classe
class NomeClasse
{
//Proprità
visibilità tipo nomeProrpietà;
//Costruttore
public NomeClasse() { }
//Metodi
visibilità tipoRitornato nomeMetodo1() { }
}
38. 38
Modificatori di accesso
public
Nessuna restrizione di accesso.
protected
L'accesso è limitato alla classe di appartenenza o ai tipi
derivati dalla classe di appartenenza.
internal
L'accesso è limitato all'assembly corrente.
protected internal
L'accesso è limitato all'assembly corrente o ai tipi derivati
dalla classe di appartenenza.
private
L'accesso è limitato al tipo di appartenenza.
40. 40
Campi e Proprietà
Campo
Parola chiave usata alla fine di
metodi che restituiscono un
valore
private string email;
Parola chiave, si riferisce al
public string Email
valore passato che vogliamo
{
assegnare
Proprietà
get { return email; }
set { email = value; }
}
Abilito la letture, get, e la scrittura della proprietà, set
42. 42
Metodi
Tipo restituito
Creo una stringa vuota
public string ChiSei() {
string result = "";
result = "Io sono " + nome + " " + cognome + "/n";
result = result + "La mia email è " + email;
return result;
}
Il simbolo + viene usato per
«concatenare», cioè unire, le stringhe
Alla stringa iniziale concateno altre
parti
Valore restituito dalla funzione
45. 45
Utilizzo dei metodi
static void Main(string[] args)
{
Persona mario = new Persona("Mario", "Verdi");
mario.Email = "mario@polimi.it";
Le proprietà si utilizzano semplicemente con = senza le ()
string rit = mario.ChiSei();
Console.Write(rit);
Console.ReadKey();
}
La keyword new, serve per creare nuovi
oggetti. Si usa prima del costruttore
Classica chiamata di un
metodo con valore di
ritorno
47. 47
Richiamo costruttore base
private int matricola;
public Studente(string nome, string cognome,
int matricola) : base(nome, cognome) {
this.matricola = matricola;
}
•
•
La keyword «base» che richiama i metodi della classe base, in questo caso direttamente il
costruttore, e gli passa i parametri
Dopo l’esecuzione del costruttore della classe base, vengono eseguite le operazioni rimanenti.
48. 48
Richiamo costruttore base(2)
private int matricola;
public Studente(string nome, string cognome,
int matricola) : base(nome, cognome) {
this.matricola = matricola;
}
• La keyword «base» che richiama i metodi della classe base, in questo caso direttamente il
costruttore, e gli passa i parametri
• Dopo l’esecuzione del costruttore della classe base, vengono eseguite le operazioni rimanenti.
public Studente(string nome, string cognome) :
this(nome, cognome, 00000) { }
• In questo caso il costruttore richiama il costruttore definito prima settando un valore di default
per la matricola
49. 49
Override
public virtual string ChiSei()
Nella classe base aggiungo la parola
«virtual»
public override string ChiSei() {
string result = base.ChiSei();
result = result + "n" + "La mia matricola è " +
matricola;
return result;
}
Nella sottoclasse aggiungo la parola «override»
prima del metodo
50. 54
Classi e metodi «abstract»
public abstract class A { // Class members here. }
public abstract class A {
public abstract void DoWork(int i);
}
51. 55
«interface»
public interface IEsempio {
void Metodo1();
bool Metodo2();
string Proprieta1 { get; set; }
int Proprieta2 { get; }
}
public class Esempio : Iesempio{// Implementazione. }
52. 56
Struttura ad oggetti
Descrive i metodi che tutte le
classi devono implementare
Interfaccia
Classe Astratta
Classe
Concreta
1
Classe
Concreta
2
Implementazione dei metodi
validi per tutte le classi
Implementazione specifica dei
metodi e funzionalità
aggiuntive
56. 64
Eccezioni(2)
In questo blocco si inseriscono le
operazioni che si tentano di eseguire
try {
result = SafeDivision(a, b);
Console.WriteLine("{0} divided by {1} = {2}", a, b, result);
}
catch (DivideByZeroException e) {
Console.WriteLine("Divisione per 0");
}
catch (Exception e) {
Console.WriteLine("Altra eccezione");
}
finally { Console.WriteLine("Fine programma");
Cosolole.ReadLine(); }
Istruzioni da eseguire se si verificano
Eccezioni di tipo DivideByZeroException
Istruzioni da eseguire se si verificano Eccezioni
di tipo diverso da DivideByZeroException
Operazioni che volgiamo comunque
eseguire
58. 66
Eccezioni Personalizzate
class MiaException : Exception
{
public MiaException() : base() { }
public MiaException(string message) : base(message) {}
public MiaException(string message, System.Exception inner)
: base(message, inner) { }
protected MiaException(System.Runtime.Serialization.
SerializationInfo
info,System.Runtime.Serialization.
StreamingContext context) { }
}
•
•
Costruttori che dovrebbero essere implementati nella nuova classe
È possibile aggiungere altri costruttori e metodi
60. 68
Delegati(2)
public delegate double Delegato(double dVal); // dichiaro un metodo che può essere delegato
class Program
{
static void Main(string[] args)
{
Program pr = new Program();
// associo al metodo delegato una implementazione
Delegato q = new Delegato(pr.Quadrato);
q += new Delegato(pr.Cubo);
// eseguo le normali operazioni sul delegato
double dVal = Double.Parse(Console.ReadLine());
dVal = q(dVal);
Console.ReadKey();
}
//implementazione del metodo quadrato
public double Quadrato(double dVal) {
Console.WriteLine("sono il delegato calcolo il quadrato di " + dVal + " : " + dVal*dVal);
return dVal*dVal; }
//implementazione del metodo cubo
public double Cubo(double dVal) {
Console.WriteLine("sono il delegato calcolo il cubo di " + " : " + dVal * dVal*dVal);
return dVal* dVal * dVal; }
}
62. 70
Eventi(2)
class OggettoConEvento
{
public event EventHandler nuovoEvento;
public void ScatenaEvento(
{
if (nuovoEvento != null)
nuovoEvento(this, EventArgs.Empty);
}
}
class Program
{
static void Main(string[] args) {
OggettoConEvento obj = new OggettoConEvento();
obj.nuovoEvento += new EventHandler(obj_nuovoEvento);
System.Threading.Thread.Sleep(1000*4);
obj.ScatenaEvento();
}
static void obj_nuovoEvento(object sender, EventArgs e)
Console.WriteLine("si è scatenato un evento");
Console.ReadKey();
}
}
{
63. 71
Operazioni su file
• FileStream permette di accedere o creare un file:
FileStream fs = new FileStream("test.txt",
FileMode.Open, FileAccess.ReadWrite);
• Sempre chiudere il file al termine delle operazioni o le modifiche potrebbero
andare perse:
fs.Close();
64. 72
Scrivere e leggere su file
StreamWriter sr = new StreamWriter(fs);
sr.Write(text);
sr.Close();
Prende come parametro uno Stream o
il nome del file
Esistono varie modalità di scrittura
StreamReader sr = new StreamReader("test.txt");
string res = sr.ReadLine();
sr.Close();
Analogo al Writer
68. 77
Serializzazione Binaria
FileStream fs = new FileStream("Serializzazione.txt",
FileMode.OpenOrCreate);
File o stream dove salvare l’oggetto
BinaryFormatter bf = new BinaryFormatter();
Persona
Oggetto per le operazioni di
serializzazione
Persona)bf.Deserialize(fs);
Serializzazione e deserializzazione
Chiudi il file
70. 79
Serializzazione XML(2)
FileStream fs = new FileStream("Serializzazione.txt",
FileMode.OpenOrCreate);
XmlSerializer xs = new XmlSerializer(typeof(Persona));
xs.Serialize(fs, mario);
Persona mario = (Persona)xs.Deserialize(fs);
fs.Close();
Tipo dell’oggetto che si
vuole serializzare
• La classe Persona deve implementare un costruttore senza parametri
public Persona(string nome, string cognome, string email){}
Serializzazione e
deserializzazione