Corso pratico di C# - 2013
Upcoming SlideShare
Loading in...5
×
 

Corso pratico di C# - 2013

on

  • 816 views

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

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

Statistics

Views

Total Views
816
Views on SlideShare
812
Embed Views
4

Actions

Likes
0
Downloads
34
Comments
0

1 Embed 4

http://www.slideee.com 4

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Corso pratico di C# - 2013 Corso pratico di C# - 2013 Presentation Transcript

  • Corso pratico di C# Come imparare a programmare e sopravvivere Matteo Valoriani Microsoft Student Partner mvaloriani@gmail.com
  • 2
  • 3 Calendario e programma
  • 4 Calendario e programma
  • 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
  • 7 Prima della programmazione OO
  • 8 Prima della programmazione OO
  • 9 I primi linguaggi OO
  • 10 Principi di Programmazione OO
  • 11 Oggetti
  • 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 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 Caratteristiche Linguaggio OO
  • 15 Caratteristiche Linguaggio OO (2)
  • 16 Caratteristiche Linguaggio OO (3)
  • 17 Altre keyword
  • 18 Pensare ad oggetti
  • 19 Come si scelgono gli oggetti?
  • 20 Accoppiamento & Coesione
  • Storia (solo un po’) Anders Hejlsberg 22
  • 23 Caratteristiche di C#
  • 24 Framework .Net
  • 25 Architettura
  • 27 Visual studio 2013
  • 28 Console Application
  • 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 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 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 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
  • 33 Strutture base: Cicli(2) foreach (Persona item in listaPersone) { item.ChiSei(); }
  • 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 }
  • 35 Calendario e programma http://matteovaloriani.eventbrite.com/
  • 36 Creare una classe class NomeClasse { //Proprità visibilità tipo nomeProrpietà; //Costruttore public NomeClasse() { } //Metodi visibilità tipoRitornato nomeMetodo1() { } }
  • 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
  • 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.
  • 39 Tipi
  • 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
  • 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
  • 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
  • 43 Costruttori private string Nome; private string Cognome; public Persona(string Nome, string Cognome) { this.Nome = Nome; this.Cognome = Cognome; } this
  • 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; }
  • 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
  • 46 Ereditarietà class Studente : Persona { … } Nuova classe Classe da cui eredita
  • 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 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 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
  • 54 Classi e metodi «abstract» public abstract class A { // Class members here. } public abstract class A { public abstract void DoWork(int i); }
  • 55 «interface» public interface IEsempio { void Metodo1(); bool Metodo2(); string Proprieta1 { get; set; } int Proprieta2 { get; } } public class Esempio : Iesempio{// Implementazione. }
  • 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
  • 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; } //... }
  • 59
  • 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
  • 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
  • 65 Eccezioni(3)
  • 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
  • 67 Delegati
  • 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; } }
  • 69 Eventi
  • 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(); } } {
  • 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();
  • 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
  • 73 Scrivere e leggere su file BinaryWriter BinaryReader
  • 74 Serializzazione
  • 75 Serializzazione C# Serializable] prima della classe Serializable] public class Persona {// classe} NonSerialized] NonSerialized] private string tempCount;
  • 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
  • 78 Serializzazione Xml
  • 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
  • 80 Serializzazione XML(3) XmlIgnore()], XmlElement(ElementName = "TaxRate")], • XmlArray("ListaPersona")], [XmlArrayItem("Persona")],