SlideShare una empresa de Scribd logo
1 de 71
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")],

Más contenido relacionado

La actualidad más candente

Programmazione ad oggetti
Programmazione ad oggettiProgrammazione ad oggetti
Programmazione ad oggettiAnna_1969
 
POO - 02 - Fundamentos da Linguagem Java e da Orientação a Objetos
POO - 02 - Fundamentos da Linguagem Java e da Orientação a ObjetosPOO - 02 - Fundamentos da Linguagem Java e da Orientação a Objetos
POO - 02 - Fundamentos da Linguagem Java e da Orientação a ObjetosLudimila Monjardim Casagrande
 
Object oriented programming interview questions
Object oriented programming interview questionsObject oriented programming interview questions
Object oriented programming interview questionsKeet Sugathadasa
 
Design Pattern - Factory Method Pattern
Design Pattern - Factory Method PatternDesign Pattern - Factory Method Pattern
Design Pattern - Factory Method PatternMudasir Qazi
 
Programmazione funzionale: un primo approccio attraverso F#
Programmazione funzionale: un primo approccio attraverso F#Programmazione funzionale: un primo approccio attraverso F#
Programmazione funzionale: un primo approccio attraverso F#Commit University
 
Inner Classes & Multi Threading in JAVA
Inner Classes & Multi Threading in JAVAInner Classes & Multi Threading in JAVA
Inner Classes & Multi Threading in JAVATech_MX
 
Classes, objects in JAVA
Classes, objects in JAVAClasses, objects in JAVA
Classes, objects in JAVAAbhilash Nair
 
4. Classes and Methods
4. Classes and Methods4. Classes and Methods
4. Classes and MethodsNilesh Dalvi
 
14. Defining Classes
14. Defining Classes14. Defining Classes
14. Defining ClassesIntro C# Book
 
Java abstract class & abstract methods
Java abstract class & abstract methodsJava abstract class & abstract methods
Java abstract class & abstract methodsShubham Dwivedi
 
Programação Orientada a Objetos
Programação Orientada a ObjetosProgramação Orientada a Objetos
Programação Orientada a ObjetosIgor Takenami
 
OOP Unit 2 - Classes and Object
OOP Unit 2 - Classes and ObjectOOP Unit 2 - Classes and Object
OOP Unit 2 - Classes and Objectdkpawar
 

La actualidad más candente (20)

Programmazione ad oggetti
Programmazione ad oggettiProgrammazione ad oggetti
Programmazione ad oggetti
 
Storage class in C Language
Storage class in C LanguageStorage class in C Language
Storage class in C Language
 
POO - 02 - Fundamentos da Linguagem Java e da Orientação a Objetos
POO - 02 - Fundamentos da Linguagem Java e da Orientação a ObjetosPOO - 02 - Fundamentos da Linguagem Java e da Orientação a Objetos
POO - 02 - Fundamentos da Linguagem Java e da Orientação a Objetos
 
Inheritance in C++
Inheritance in C++Inheritance in C++
Inheritance in C++
 
Object oriented programming interview questions
Object oriented programming interview questionsObject oriented programming interview questions
Object oriented programming interview questions
 
Java Lista Exercicios 03
Java Lista Exercicios 03Java Lista Exercicios 03
Java Lista Exercicios 03
 
Design Pattern - Factory Method Pattern
Design Pattern - Factory Method PatternDesign Pattern - Factory Method Pattern
Design Pattern - Factory Method Pattern
 
Programmazione funzionale: un primo approccio attraverso F#
Programmazione funzionale: un primo approccio attraverso F#Programmazione funzionale: un primo approccio attraverso F#
Programmazione funzionale: un primo approccio attraverso F#
 
Inner Classes & Multi Threading in JAVA
Inner Classes & Multi Threading in JAVAInner Classes & Multi Threading in JAVA
Inner Classes & Multi Threading in JAVA
 
Classes, objects in JAVA
Classes, objects in JAVAClasses, objects in JAVA
Classes, objects in JAVA
 
C++ string
C++ stringC++ string
C++ string
 
4. Classes and Methods
4. Classes and Methods4. Classes and Methods
4. Classes and Methods
 
C# classes objects
C#  classes objectsC#  classes objects
C# classes objects
 
14. Defining Classes
14. Defining Classes14. Defining Classes
14. Defining Classes
 
Factory Design Pattern
Factory Design PatternFactory Design Pattern
Factory Design Pattern
 
Java abstract class & abstract methods
Java abstract class & abstract methodsJava abstract class & abstract methods
Java abstract class & abstract methods
 
CS8392 OOP
CS8392 OOPCS8392 OOP
CS8392 OOP
 
Programação Orientada a Objetos
Programação Orientada a ObjetosProgramação Orientada a Objetos
Programação Orientada a Objetos
 
Type casting
Type castingType casting
Type casting
 
OOP Unit 2 - Classes and Object
OOP Unit 2 - Classes and ObjectOOP Unit 2 - Classes and Object
OOP Unit 2 - Classes and Object
 

Similar a Corso pratico di C# - 2013

Java Unit Testing - JUnit (2)
Java Unit Testing - JUnit (2)Java Unit Testing - JUnit (2)
Java Unit Testing - JUnit (2)fgianneschi
 
Javaday 2006: Java 5
Javaday 2006: Java 5Javaday 2006: Java 5
Javaday 2006: Java 5Matteo Baccan
 
Lezione design patterns 2011 (Peron)
Lezione design patterns 2011 (Peron)Lezione design patterns 2011 (Peron)
Lezione design patterns 2011 (Peron)lukebonham
 
Webbit 2004: Tiger, java
Webbit 2004: Tiger, javaWebbit 2004: Tiger, java
Webbit 2004: Tiger, javaMatteo Baccan
 
The Hitchhiker's Guide to testable code: semplici regole per scrivere codice ...
The Hitchhiker's Guide to testable code: semplici regole per scrivere codice ...The Hitchhiker's Guide to testable code: semplici regole per scrivere codice ...
The Hitchhiker's Guide to testable code: semplici regole per scrivere codice ...Davide Cerbo
 
Introduzione al Test Driven Development
Introduzione al Test Driven DevelopmentIntroduzione al Test Driven Development
Introduzione al Test Driven DevelopmentEnnio Masi
 
Design pattern template method
Design pattern template methodDesign pattern template method
Design pattern template methodNelson Firmani
 
Programmazione a oggetti tramite la macchina del caffé (pt. 2)
Programmazione a oggetti tramite la macchina del caffé (pt. 2)Programmazione a oggetti tramite la macchina del caffé (pt. 2)
Programmazione a oggetti tramite la macchina del caffé (pt. 2)Marcello Missiroli
 
Googletest, tdd e mock
Googletest, tdd e mockGoogletest, tdd e mock
Googletest, tdd e mockyuroller
 
Corso Object Oriented Analysis and Design
Corso Object Oriented Analysis and DesignCorso Object Oriented Analysis and Design
Corso Object Oriented Analysis and DesignK-Tech Formazione
 
Android Test Driven Development
Android Test Driven DevelopmentAndroid Test Driven Development
Android Test Driven Developmentsazilla
 
Android Test Driven Development
Android Test Driven DevelopmentAndroid Test Driven Development
Android Test Driven Developmentsazilla
 
Two months of Kotlin
Two months of KotlinTwo months of Kotlin
Two months of KotlinErik Minarini
 

Similar a Corso pratico di C# - 2013 (20)

Java Unit Testing - JUnit (2)
Java Unit Testing - JUnit (2)Java Unit Testing - JUnit (2)
Java Unit Testing - JUnit (2)
 
Javaday 2006: Java 5
Javaday 2006: Java 5Javaday 2006: Java 5
Javaday 2006: Java 5
 
What's new in C# 7
What's new in C# 7What's new in C# 7
What's new in C# 7
 
Corso Java
Corso JavaCorso Java
Corso Java
 
Corso Java 2 - AVANZATO
Corso Java 2 - AVANZATOCorso Java 2 - AVANZATO
Corso Java 2 - AVANZATO
 
Dal c a Java (3/3)
Dal c a Java (3/3)Dal c a Java (3/3)
Dal c a Java (3/3)
 
Lezione design patterns 2011 (Peron)
Lezione design patterns 2011 (Peron)Lezione design patterns 2011 (Peron)
Lezione design patterns 2011 (Peron)
 
Webbit 2004: Tiger, java
Webbit 2004: Tiger, javaWebbit 2004: Tiger, java
Webbit 2004: Tiger, java
 
The Hitchhiker's Guide to testable code: semplici regole per scrivere codice ...
The Hitchhiker's Guide to testable code: semplici regole per scrivere codice ...The Hitchhiker's Guide to testable code: semplici regole per scrivere codice ...
The Hitchhiker's Guide to testable code: semplici regole per scrivere codice ...
 
Pillole di C++
Pillole di C++Pillole di C++
Pillole di C++
 
Introduzione al Test Driven Development
Introduzione al Test Driven DevelopmentIntroduzione al Test Driven Development
Introduzione al Test Driven Development
 
Design pattern template method
Design pattern template methodDesign pattern template method
Design pattern template method
 
Programmazione a oggetti tramite la macchina del caffé (pt. 2)
Programmazione a oggetti tramite la macchina del caffé (pt. 2)Programmazione a oggetti tramite la macchina del caffé (pt. 2)
Programmazione a oggetti tramite la macchina del caffé (pt. 2)
 
Googletest, tdd e mock
Googletest, tdd e mockGoogletest, tdd e mock
Googletest, tdd e mock
 
Java5
Java5Java5
Java5
 
Vb.Net
Vb.NetVb.Net
Vb.Net
 
Corso Object Oriented Analysis and Design
Corso Object Oriented Analysis and DesignCorso Object Oriented Analysis and Design
Corso Object Oriented Analysis and Design
 
Android Test Driven Development
Android Test Driven DevelopmentAndroid Test Driven Development
Android Test Driven Development
 
Android Test Driven Development
Android Test Driven DevelopmentAndroid Test Driven Development
Android Test Driven Development
 
Two months of Kotlin
Two months of KotlinTwo months of Kotlin
Two months of Kotlin
 

Más de Matteo Valoriani

Immerge yourself in a new Reality
Immerge yourself in a new RealityImmerge yourself in a new Reality
Immerge yourself in a new RealityMatteo Valoriani
 
How Augment your Reality: Different perspective on the Reality / Virtuality C...
How Augment your Reality: Different perspective on the Reality / Virtuality C...How Augment your Reality: Different perspective on the Reality / Virtuality C...
How Augment your Reality: Different perspective on the Reality / Virtuality C...Matteo Valoriani
 
Debug, Analyze and Optimize Games with Intel Tools
Debug, Analyze and Optimize Games with Intel Tools Debug, Analyze and Optimize Games with Intel Tools
Debug, Analyze and Optimize Games with Intel Tools Matteo Valoriani
 
More Personal Computing: Windows 10, Kinect and Wearables
More Personal Computing: Windows 10, Kinect and WearablesMore Personal Computing: Windows 10, Kinect and Wearables
More Personal Computing: Windows 10, Kinect and WearablesMatteo Valoriani
 
Introduction to development
Introduction to developmentIntroduction to development
Introduction to developmentMatteo Valoriani
 
Etna dev 2016 - Deep Dive Holographic Applications
Etna dev 2016 - Deep Dive Holographic ApplicationsEtna dev 2016 - Deep Dive Holographic Applications
Etna dev 2016 - Deep Dive Holographic ApplicationsMatteo Valoriani
 
Etna dev 2016 - Introduction to Holographic Development
Etna dev 2016 - Introduction to Holographic DevelopmentEtna dev 2016 - Introduction to Holographic Development
Etna dev 2016 - Introduction to Holographic DevelopmentMatteo Valoriani
 
Etna dev 2016 - Introduction to Mixed Reality with HoloLens
Etna dev 2016 - Introduction to Mixed Reality with HoloLensEtna dev 2016 - Introduction to Mixed Reality with HoloLens
Etna dev 2016 - Introduction to Mixed Reality with HoloLensMatteo Valoriani
 
Mixed Reality from demo to product
Mixed Reality from demo to productMixed Reality from demo to product
Mixed Reality from demo to productMatteo Valoriani
 
Intel RealSense Hands-on Lab - Rome
Intel RealSense Hands-on Lab - RomeIntel RealSense Hands-on Lab - Rome
Intel RealSense Hands-on Lab - RomeMatteo Valoriani
 
Develop store apps with kinect for windows v2
Develop store apps with kinect for windows v2Develop store apps with kinect for windows v2
Develop store apps with kinect for windows v2Matteo Valoriani
 
Programming with kinect v2
Programming with kinect v2Programming with kinect v2
Programming with kinect v2Matteo Valoriani
 
Programming with RealSense using .NET
Programming with RealSense using .NETProgramming with RealSense using .NET
Programming with RealSense using .NETMatteo Valoriani
 
Tecnologie e Startup: ICT è solo una commodity?
Tecnologie e Startup: ICT è solo una commodity? Tecnologie e Startup: ICT è solo una commodity?
Tecnologie e Startup: ICT è solo una commodity? Matteo Valoriani
 

Más de Matteo Valoriani (20)

Immerge yourself in a new Reality
Immerge yourself in a new RealityImmerge yourself in a new Reality
Immerge yourself in a new Reality
 
How Augment your Reality: Different perspective on the Reality / Virtuality C...
How Augment your Reality: Different perspective on the Reality / Virtuality C...How Augment your Reality: Different perspective on the Reality / Virtuality C...
How Augment your Reality: Different perspective on the Reality / Virtuality C...
 
Hour ofcode
Hour ofcodeHour ofcode
Hour ofcode
 
Debug, Analyze and Optimize Games with Intel Tools
Debug, Analyze and Optimize Games with Intel Tools Debug, Analyze and Optimize Games with Intel Tools
Debug, Analyze and Optimize Games with Intel Tools
 
More Personal Computing: Windows 10, Kinect and Wearables
More Personal Computing: Windows 10, Kinect and WearablesMore Personal Computing: Windows 10, Kinect and Wearables
More Personal Computing: Windows 10, Kinect and Wearables
 
Introduction to development
Introduction to developmentIntroduction to development
Introduction to development
 
Etna dev 2016 - Deep Dive Holographic Applications
Etna dev 2016 - Deep Dive Holographic ApplicationsEtna dev 2016 - Deep Dive Holographic Applications
Etna dev 2016 - Deep Dive Holographic Applications
 
Etna dev 2016 - Introduction to Holographic Development
Etna dev 2016 - Introduction to Holographic DevelopmentEtna dev 2016 - Introduction to Holographic Development
Etna dev 2016 - Introduction to Holographic Development
 
Etna dev 2016 - Introduction to Mixed Reality with HoloLens
Etna dev 2016 - Introduction to Mixed Reality with HoloLensEtna dev 2016 - Introduction to Mixed Reality with HoloLens
Etna dev 2016 - Introduction to Mixed Reality with HoloLens
 
Mixed Reality from demo to product
Mixed Reality from demo to productMixed Reality from demo to product
Mixed Reality from demo to product
 
Intel RealSense Hands-on Lab - Rome
Intel RealSense Hands-on Lab - RomeIntel RealSense Hands-on Lab - Rome
Intel RealSense Hands-on Lab - Rome
 
Develop store apps with kinect for windows v2
Develop store apps with kinect for windows v2Develop store apps with kinect for windows v2
Develop store apps with kinect for windows v2
 
Programming with kinect v2
Programming with kinect v2Programming with kinect v2
Programming with kinect v2
 
Programming with RealSense using .NET
Programming with RealSense using .NETProgramming with RealSense using .NET
Programming with RealSense using .NET
 
Face recognition
Face recognitionFace recognition
Face recognition
 
Communitydays2015
Communitydays2015Communitydays2015
Communitydays2015
 
Tecnologie e Startup: ICT è solo una commodity?
Tecnologie e Startup: ICT è solo una commodity? Tecnologie e Startup: ICT è solo una commodity?
Tecnologie e Startup: ICT è solo una commodity?
 
Intel real sense handson
Intel real sense handsonIntel real sense handson
Intel real sense handson
 
Communityday2013
Communityday2013Communityday2013
Communityday2013
 
Communitydays2014
Communitydays2014Communitydays2014
Communitydays2014
 

Corso pratico di C# - 2013

  • 1. Corso pratico di C# Come imparare a programmare e sopravvivere Matteo Valoriani Microsoft Student Partner mvaloriani@gmail.com
  • 2. 2
  • 6. 6
  • 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 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
  • 19. 19 Come si scelgono gli oggetti?
  • 21.
  • 22. Storia (solo un po’) Anders Hejlsberg 22
  • 26.
  • 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
  • 33. 33 Strutture base: Cicli(2) foreach (Persona item in listaPersone) { item.ChiSei(); }
  • 34. 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 }
  • 36. 36 Creare una classe class NomeClasse { //Proprità visibilità tipo nomeProrpietà; //Costruttore public NomeClasse() { } //Metodi visibilità tipoRitornato nomeMetodo1() { } }
  • 37. 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. 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
  • 41. 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. 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. 43 Costruttori private string Nome; private string Cognome; public Persona(string Nome, string Cognome) { this.Nome = Nome; this.Cognome = Cognome; } this
  • 44. 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. 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. 46 Ereditarietà class Studente : Persona { … } Nuova classe Classe da cui eredita
  • 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
  • 53. 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; } //... }
  • 54. 59
  • 55. 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
  • 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
  • 65. 73 Scrivere e leggere su file BinaryWriter BinaryReader
  • 67. 75 Serializzazione C# Serializable] prima della classe Serializable] public class Persona {// classe} NonSerialized] NonSerialized] private string tempCount;
  • 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
  • 71. 80 Serializzazione XML(3) XmlIgnore()], XmlElement(ElementName = "TaxRate")], • XmlArray("ListaPersona")], [XmlArrayItem("Persona")],