Corso pratico di C# - 2013

5,077 views

Published on

Slide del corso "Corso pratico di C#" tenute al Politecnico di Milano/Statale a fine 2013

Published in: Technology
0 Comments
4 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
5,077
On SlideShare
0
From Embeds
0
Number of Embeds
19
Actions
Shares
0
Downloads
269
Comments
0
Likes
4
Embeds 0
No embeds

No notes for slide

Corso pratico di C# - 2013

  1. 1. Corso pratico di C# Come imparare a programmare e sopravvivere Matteo Valoriani Microsoft Student Partner mvaloriani@gmail.com
  2. 2. 2
  3. 3. 3 Calendario e programma
  4. 4. 4 Calendario e programma
  5. 5. 5 http://csharpcourse.com/ http://msdn.microsoft.com/it-it/library/aa287551(v=VS.71).aspx http://www.microsoft.com/italy/beit/Default.aspx http://www.asict.polimi.it/software/microsoft/msdn-academic-alliance.html https://www.dreamspark.com/default.aspx http://weblogs.asp.net/sreejukg/archive/2011/01/06/documenting-c-library-using-ghostdocand-sandcastle.aspx http://grantpalin.com/2010/01/10/net-projects-generating-documentation-with-sandcastle/
  6. 6. 6
  7. 7. 7 Prima della programmazione OO
  8. 8. 8 Prima della programmazione OO
  9. 9. 9 I primi linguaggi OO
  10. 10. 10 Principi di Programmazione OO
  11. 11. 11 Oggetti
  12. 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.
  13. 13. 13 Istanze Nome Classe persona1 Nome istanza dell’oggetto Nome dell’attributo Operazioni che la classe è in grado di fare Persona ______________________ Nome = «Mario» Cognome = «Verdi» Indirizzo = «Via Roma» Numero = «3» _____________________ Mangiare Dormire Cambiare abitazione Valore dell’attributo
  14. 14. 14 Caratteristiche Linguaggio OO
  15. 15. 15 Caratteristiche Linguaggio OO (2)
  16. 16. 16 Caratteristiche Linguaggio OO (3)
  17. 17. 17 Altre keyword
  18. 18. 18 Pensare ad oggetti
  19. 19. 19 Come si scelgono gli oggetti?
  20. 20. 20 Accoppiamento & Coesione
  21. 21. Storia (solo un po’) Anders Hejlsberg 22
  22. 22. 23 Caratteristiche di C#
  23. 23. 24 Framework .Net
  24. 24. 25 Architettura
  25. 25. 27 Visual studio 2013
  26. 26. 28 Console Application
  27. 27. 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
  28. 28. 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.
  29. 29. 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
  30. 30. 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
  31. 31. 33 Strutture base: Cicli(2) foreach (Persona item in listaPersone) { item.ChiSei(); }
  32. 32. 34 Alternative if (condizione == true) {//fai qualcosa } else {//fai qualcosa} Switch switch (switch_on) { case 1://fai qualcosa break; case 2://fai qualcosa break; default: //fai qualcosa }
  33. 33. 35 Calendario e programma http://matteovaloriani.eventbrite.com/
  34. 34. 36 Creare una classe class NomeClasse { //Proprità visibilità tipo nomeProrpietà; //Costruttore public NomeClasse() { } //Metodi visibilità tipoRitornato nomeMetodo1() { } }
  35. 35. 37 Identificatore Case Esempio Classe Pascal AppDomain Tipo di enumerazione Pascal ErrorLevel Valori di enumerazione Pascal FatalError Evento Pascal ValueChanged Classe dell'eccezione Pascal WebException Campo statico di sola lettura Pascal RedValue Interfaccia Pascal IDisposable Metodo Pascal ToString Spazio dei nomi Pascal System.Drawing Parametro Camel typeName Property Pascal BackColor
  36. 36. 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.
  37. 37. 39 Tipi
  38. 38. 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
  39. 39. 41 Enum enum Days { Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday }; enum Months : byte { Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec }; enum MachineState { PowerOff = 0, Running = 5, Sleeping = 10, Hibernating = Sleeping + 5 } Days meetingDay = Days.Monday; meetingDay //Monday
  40. 40. 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
  41. 41. 43 Costruttori private string Nome; private string Cognome; public Persona(string Nome, string Cognome) { this.Nome = Nome; this.Cognome = Cognome; } this
  42. 42. 44 Overload public Persona(string Nome, string Cognome, ) { this.Nome = Nome; this.Cognome = Cognome; } public Persona(string nome, string cognome, string email) { this.nome = nome; this.cognome = cognome; this.email = email; }
  43. 43. 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
  44. 44. 46 Ereditarietà class Studente : Persona { … } Nuova classe Classe da cui eredita
  45. 45. 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.
  46. 46. 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
  47. 47. 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
  48. 48. 54 Classi e metodi «abstract» public abstract class A { // Class members here. } public abstract class A { public abstract void DoWork(int i); }
  49. 49. 55 «interface» public interface IEsempio { void Metodo1(); bool Metodo2(); string Proprieta1 { get; set; } int Proprieta2 { get; } } public class Esempio : Iesempio{// Implementazione. }
  50. 50. 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
  51. 51. 57 Classi e metodi «Static» static class TempConverter { public static double CelsiusToFahrenheit(string temperatureCelsius){ double celsius = System.Double.Parse(temperatureCelsius); double fahrenheit = (celsius * 9 / 5) + 32; return fahrenheit; } //... }
  52. 52. 59
  53. 53. 63 Eccezioni static double SafeDivision(double x, double y) { if (y == 0) throw new System.DivideByZeroException(); return x / y; } Parola chiave per «sollevare» le eccezioni
  54. 54. 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
  55. 55. 65 Eccezioni(3)
  56. 56. 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
  57. 57. 67 Delegati
  58. 58. 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; } }
  59. 59. 69 Eventi
  60. 60. 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(); } } {
  61. 61. 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();
  62. 62. 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
  63. 63. 73 Scrivere e leggere su file BinaryWriter BinaryReader
  64. 64. 74 Serializzazione
  65. 65. 75 Serializzazione C# Serializable] prima della classe Serializable] public class Persona {// classe} NonSerialized] NonSerialized] private string tempCount;
  66. 66. 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
  67. 67. 78 Serializzazione Xml
  68. 68. 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
  69. 69. 80 Serializzazione XML(3) XmlIgnore()], XmlElement(ElementName = "TaxRate")], • XmlArray("ListaPersona")], [XmlArrayItem("Persona")],

×