Origini di C# - unict.it · 2009-11-03 · E’consentito l’accesso alla memoria attraverso i...
Transcript of Origini di C# - unict.it · 2009-11-03 · E’consentito l’accesso alla memoria attraverso i...
Il linguaggio C#
Introduzione e tip
i di dato
Tecniche di Programmazione avanzata
Corso d
i Laurea S
pecialistica in
Ingegneria T
elematica
Università
Kore –
Enna –
A.A. 2
009-2010
Alessa
ndro Lo
ngheu
http
://www.diit.u
nict.it/u
sers/alongheu
alessandro.lon
nict.it
2
A. Longheu –Tecniche di programmazione avanzata
Orig
ini d
i C#
�C# was
developed by
Anders
Hejlsb
erg and Scott
Wilta
muth.
�Hejlsb
erg is
also
known for cre
atin
g T
urbo Pasca
l, a
popular la
nguage fo
r PC programming, a
nd fo
r leading
the te
am th
at d
esig
ned Borla
nd Delphi, o
ne of th
e first
succe
ssful ID
E fo
r client/se
rver p
rogramming.
�The goal o
f C# is to
provid
e a sim
ple, sa
fe, m
odern,
object-o
riented, Internet-centric
, high-perfo
rmance
language fo
r .NET development
�You
learn
C# specifically to create .NET
applications; pretending otherw
ise would miss
the
point o
f the language.
3
A. Longheu –Tecniche di programmazione avanzata
�Inizia
lmente, M
icrosoft su
pporta
vaJava
�Poi,
cifu una
litegiudizia
riacon Sun, poich
éMicro
soft
voleva
aggiungere
classi
e fe
atures sp
ecifich
eper W
indows
(motivi
diperfo
rmance)
�Micro
soft p
erse
la ca
usa, in
diabbandonòJava in
Internet
Explorer 6
la JV
M M
icrosoft n
on è
più
insta
llata
per d
efault,
e co
munquesupporta
solo fin
oa Ja
va 1.1.4
�C# è
illinguaggio
“simil-Ja
va”cheMicro
soft h
a in
trodotto
dopotale evento,e .NET èl’in
frastru
ttura chefa
le veci
della
Java Platfo
rm
Orig
ini d
i C#
4
A. Longheu –Tecniche di programmazione avanzata
C# -Arch
itettu
ra
�L’a
rchitettu
raè“sim
il-Java”, co
n alcu
nediffe
renze
Ja
va
pla
tform
Ja
va
pla
tform
C# e
.NE
TC
# e
.NE
T
Com
pila
tore
C# –
pro
duce u
n
form
ato
(MS
IL) p
orta
bile
per .N
ET
Com
pila
tore
C# –
pro
duce u
n
form
ato
(MS
IL) p
orta
bile
per .N
ET
Com
pila
tore
Ja
va –
pro
duce
byte
code
(.cla
ss) p
orta
bile
Com
pila
tore
Ja
va –
pro
duce
byte
code
(.cla
ss) p
orta
bile
Com
pila
tore
JIT
(pro
duce .e
xe p
er
pia
ttafo
rma
CL
R –
richie
de
.NE
T
Fra
me
work
sulsis
tem
a)
Com
pila
tore
JIT
(pro
duce .e
xe p
er
pia
ttafo
rma
CL
R –
richie
de
.NE
T
Fra
me
work
sulsis
tem
a)
Inte
rpre
teJava
(pla
tform
depe
ndent)
-in
realtà
op
era
com
e c
om
pila
tore
JIT
Inte
rpre
teJava
(pla
tform
depe
ndent)
-in
realtà
op
era
com
e c
om
pila
tore
JIT
Com
mon L
ang
uage R
untim
e (C
LR
):
quan
do
siric
hie
de
l’esecuzio
ne
diun
.exe d
i.N
ET
, attiv
ail
com
pila
tore
JIT
che
traduce M
SIL
in c
odic
e
nativ
oe p
oi lo
esegu
e
Com
mon L
ang
uage R
untim
e (C
LR
):
quan
do
siric
hie
de
l’esecuzio
ne
diun
.exe d
i.N
ET
, attiv
ail
com
pila
tore
JIT
che
traduce M
SIL
in c
odic
e
nativ
oe p
oi lo
esegu
e
nessun
ostra
toem
bedd
ed n
el
sis
tem
aopera
tivo
nessun
ostra
toem
bedd
ed n
el
sis
tem
aopera
tivo
5
A. Longheu –Tecniche di programmazione avanzata
Arch
itettu
re a co
nfro
nto
Siste
ma operativo
Codice
.exe
Codice
MSIL
Codice
byte
code
Codice
sorgente
Compilatore
classico
Codice
sorgente
Compilatore
.NET
Codice
sorgente
Compilatore
Java
Applica
zione
standard
Form
ato sp
ecifico
del S
O
Applica
zione .N
ET
CLR
di .N
ET
Compilatore ju
st in
time
Applica
zione Ja
va
Java virtu
almachine
6
A. Longheu –Tecniche di programmazione avanzata
Convenzio
nie Stru
menti
�Ancheilprocesso
disvilu
ppoè“sim
il-Java”, co
n alcu
neimporta
ntidiffe
renze:
Ja
va p
latfo
rmJa
va p
latfo
rmC
# e
.NE
TC
# e
.NE
T
nessun
vin
colo
esplic
itonessun
vin
colo
esplic
itoO
gnicla
sse
pu
bblic
adeve
sta
re
in u
n file
om
onim
o.ja
va
Ognicla
sse
pu
bblic
adeve
sta
re
in u
n file
om
onim
o.ja
va
Il com
pila
tore
csc
pro
duce il
file
MS
IL .e
xe c
orris
pond
ente
Il com
pila
tore
csc
pro
duce il
file
MS
IL .e
xe c
orris
pond
ente
Il com
pila
tore
javac
pro
duce il
file .c
lass c
orris
pond
ente
Il com
pila
tore
javac
pro
duce il
file .c
lass c
orris
pond
ente
Pre
req
uis
itop
er l’e
secu
zio
ne:
.NE
T F
ram
ew
ork
(Red
istrib
uta
ble
o S
DK
) insta
llato
sulsis
tem
a
Pre
req
uis
itop
er l’e
secu
zio
ne:
.NE
T F
ram
ew
ork
(Red
istrib
uta
ble
o S
DK
) insta
llato
sulsis
tem
a
Pre
req
uis
itop
er l’e
secu
zio
ne:
jre(J
ava 2
Ru
ntim
e E
nviro
nm
ent)
insta
llato
sulsis
tem
a
Pre
req
uis
itop
er l’e
secu
zio
ne:
jre(J
ava 2
Ru
ntim
e E
nviro
nm
ent)
insta
llato
sulsis
tem
a
Lo s
trato
Com
mon L
an
gua
ge
Runtim
e
(CLR
) attiv
ail
com
pila
tore
JIT
che
traduce il
“finto
exe”
MS
IL in
codic
en
ativ
o, e
lo e
seg
ue
al v
olo
Lo s
trato
Com
mon L
an
gua
ge
Runtim
e
(CLR
) attiv
ail
com
pila
tore
JIT
che
traduce il
“finto
exe”
MS
IL in
codic
en
ativ
o, e
lo e
seg
ue
al v
olo
L’in
terp
rete
java in
terp
reta
ilfile
.cla
ss (o
.jar) s
opra
ge
nera
to
L’in
terp
rete
java in
terp
reta
ilfile
.cla
ss (o
.jar) s
opra
ge
nera
to
7
A. Longheu –Tecniche di programmazione avanzata
Caratte
ristichediC#
1.E’orie
ntato
aglioggetti
2.Component-o
rientatio
n3.Softw
are ro
busto
4.Mantenimento
degliinvestim
enti
8
A. Longheu –Tecniche di programmazione avanzata
Object
orie
nted
�Ognicosa
èun oggetto
�I tip
i prim
itividiJava
non so
nooggetti
(sonospecia
li) e non in
teragisco
nocon glioggetti
�I tip
i prim
itividiSmallta
lk, Lisp
sono
oggetti
ma
hannoqualch
eproblemadiperfo
rmance
�C# tra
ttai tip
i prim
itivicome oggetti
senza
problemidi
perfo
rmance
�Migliore
este
ndibilità
e riu
tilizzabilità
del co
dice
�Nuovitip
i prim
itivi: Decim
al, S
QL…
�Classi
come Collectio
ns
9
A. Longheu –Tecniche di programmazione avanzata
Componentorie
nted
�C# èilprim
o linguaggio
della
“famiglia
C”Component-
Orie
nted
�Cos’è
un co
mponente?
�Un m
odulo in
dipendente
(reuse e deploym
ent)
�Minor
Granularita
degli
oggetti
(gli
oggetti
sono
costru
ttilinguistici)
�Posso
no in
cludere più
classi
�Spesso
language-in
dependent
�Svilu
ppo
e uso
del componente
non necessita
no
di
nessu
nainterazio
ne
10
A. Longheu –Tecniche di programmazione avanzata
�I co
mponentisonosupporta
tidallinguaggio
�Proprie
tà,metodied eventi
�Attrib
utidesig
n tim
e e ru
ntim
e�Documentazio
neintegrata
XML
�Tutto
in un file
�Nessu
nfile
diheader, ID
L, etc.
�Dich
iarazio
need im
plementazio
necoincid
ono
�Può
esse
reutilizza
toin
pagine
ASP.NET
(autosufficie
nti)
Componentorie
nted
11
A. Longheu –Tecniche di programmazione avanzata
Softw
are ro
busto
e fa
cile
manutenzio
nedel so
ftware
�Garbage co
llectio
n�Fine deimemory le
aks (co
nsumo non vo
luto di m
emoria
dovuto alla mancata deallocazio
ne dalla memoria
di
varia
bili/d
ati n
on più
utilizza
ti da parte
dei p
rocessi) e
deipuntatoripendenti
�Ecce
zioni
�Type sa
fety
�Non ci
sonovaria
bilinon in
izializza
te�lim
itialle
operazio
nidicast
(no unsafe ca
st) �
Versio
ning
�Supporto
del ve
rsioning
12
A. Longheu –Tecniche di programmazione avanzata
Caratte
ristichediC#
�Supporto
per in
terfa
ccee ereditarie
tàsin
gola
�Glioggetti
nell’h
eapsonogestiti
dalgarbage co
llecto
r�
Esponemetadata co
me attrib
uti
�Intro
duce tip
i delegate e eventi
�I p
arametri d
ei m
etodi d
evono esse
re labellati in
/out/re
f�
Le cla
ssi posso
no avere un distru
ttore co
me in
C++
�Il rila
scio esplicito
delle riso
rse è
gestito
attra
verso
le in
terfa
cce�
Miglior co
ntro
llo dei n
omi
�Consente l’o
verlo
ading degli o
peratori
�Gli a
rrays p
osso
no esse
re m
ultid
imensio
nali
�Sono co
nsentiti a
lias p
er i tip
i�
E’supporta
ta la documentazio
ne XML
�E’consentito
l’acce
sso alla m
emoria
attra
verso
i puntatori (u
nsafe m
ode)
�E’supporta
ta una preprocesso
r-like syn
tax
�E’possib
ile acce
dere a fu
nzio
ni este
rne m
emorizza
te co
me dll
�Interoperabilità
(con XML, S
OAP, C
OM, D
LL e qualsia
si linguaggio di .N
ET)
�Esiste
molto
codice
C# in
.NET, q
uindi b
assa
curva
di apprendimento
13
A. Longheu –Tecniche di programmazione avanzata
C# and Ja
va
�Java è
esse
nzia
lmente
un su
bset d
iC#
con quattro
importa
ntidiffe
renze:
�Throws cla
use on m
ethods
�Inner cla
sses
�Thread syn
chroniza
tion
�Class lo
ading
14
A. Longheu –Tecniche di programmazione avanzata
C# and Ja
va (co
nt.)
�Inner cla
sses in
C# so
nogestite
come namespace, lo
sta
todeve
esse
repassa
toesplicita
mente
come
argomento
�I Threads sono
resi
disp
onibili
attra
verso
la cla
sseMonito
r
�Il m
odello
diClass lo
ading ha la ste
ssa espressività
�C# e
CLR
sonosta
te progetta
teinsie
mema so
nodue
elementi
separati
quindile loro
funzio
nalita
sono
meglio
separabilichetra
Java/JV
M
15
A. Longheu –Tecniche di programmazione avanzata
C# and Ja
va (co
nt.)
�C# perm
ette
didefin
irepiù
classi
all’in
terno
dello
stesso
file: l’u
nità
disvilu
ppoèl’Asse
mbly
�I tip
i sonoorganizza
tiin namespaces ch
esono
similiaipacka
ges Ja
va
�Namespaces so
nodefin
iticome blocch
iall’in
iziodelfile
�Un sin
golo
file può
contenere
defin
izioniche
riguardanodiffe
rentinamespaces
16
A. Longheu –Tecniche di programmazione avanzata
Il Linguaggio C#
Sintattica
mente, è
un “q
uasi-clo
ne”diJava…
�…con aggiunte
diC++
�overlo
ading deglioperatori
�operatoridiconversio
neditip
o�
…dialcu
ninuoviconcetti
�lette
rali“ve
rbatim
”�proprie
tà, in
dicizza
tori
�…
e altri
più
"discu
tibili"
�passa
ggioper rife
rimento
(ancheper tip
i prim
itivi)�codice
“non gestito
”, puntatori
�Le m
aggioridiffe
renze
sintattich
erig
uardanola sco
mparsa
delle
keyw
ords e
xtends e
implements
non presentiin C#
�packa
ge si
trasfo
rmain namespace
�C# adotta
le co
nvenzio
niPasca
l (inizia
lemaiusco
la)
17
A. Longheu –Tecniche di programmazione avanzata
Il Linguaggio C#: C
onvenzio
ni
�In Ja
va:
�i p
acka
ge hannonomicon in
izialeminusco
la
�le cla
ssihannonomicon in
izialemaiu
scola
�i m
etodihannonomicon in
izialeminusco
la
�le va
riabilihannonomicon in
izialeminusco
la
�In C#:
�i n
amespace hannonomicon in
izialemaiu
scola
�le cla
ssihannonomicon in
izialemaiu
scola
�i m
etodihannonomicon in
izialemaiu
scola
�le va
riabilihannonomicon in
izialemaiu
scola
18
A. Longheu –Tecniche di programmazione avanzata
ESEMPIO
In J
ava:
pu
blic
cla
ss E
sem
pio
{
pu
blic
sta
tic v
oid
main
(Strin
garg
s[]){
Syste
m.o
ut.p
rintln
("Hello
Wo
rld");
}In C
#:
cla
ss E
se
mp
io{
sta
tic v
oid
Ma
in(){
Syste
m.C
on
so
le.W
riteL
ine("H
ello
Wo
rld");
}
main
/ prin
t / prin
tlnM
ain
/ Write
/ Write
Lin
earg
om
en
tid
el m
ain
ob
blig
ato
riarg
om
en
tid
el
main
faco
ltativ
i
main
/ prin
t / prin
tlnM
ain
/ Write
/ Write
Lin
e
arg
om
en
tid
el m
ain
ob
blig
ato
riarg
om
en
tid
el
main
faco
ltativ
i
cla
sse
e m
ain
dic
hia
rati
pu
blic
cla
sse
e m
ain
sen
za
qu
alific
he
cla
sse
e m
ain
dic
hia
rati
pu
blic
cla
sse
e m
ain
sen
za
qu
alific
he
19
A. Longheu –Tecniche di programmazione avanzata
Caratte
ristiche di C
#
Nuove (vs. Ja
va)
�Call-b
y-reference parameters
�Stack-a
llocated objects (stru
cts)�
Block m
atrice
s�
Enumeratio
ns
�Uniform
type syste
m�
goto sta
tement
�Attrib
utes
�Syste
m-le
vel programming
�Versio
ning
Variazioni sintattic
he
�Component-b
ased programming
�Propertie
s�
Events
�Delegates
�Indexers
�foreach loop
�Boxin
g / u
nboxin
g�
...
20
A. Longheu –Tecniche di programmazione avanzata
Hello W
orld
us
ing
Sys
tem
;c
las
s H
ello
{s
tatic
vo
id M
ain
() {C
on
so
le.W
riteL
ine
("He
llo W
orld
");}} us
ing
Sys
tem
;c
las
s H
ello
{s
tatic
vo
id M
ain
() {C
on
so
le.W
riteL
ine
("He
llo W
orld
");}}
File Hello.cs
Compilazione (d
alla co
nsolle; p
roduce Hello.exe)
csc Hello.cs
Execution
Hello
�every C
# program m
ust h
ave a Main( ) m
ethod
�It is te
chnica
lly possib
le to
have m
ultip
le M
ain( ) m
ethods in
C#; in
that case you use the /m
ain command-lin
e sw
itch to tell C# which
cla
ss contains th
e M
ain( ) m
ethod th
at sh
ould se
rve as th
e entry
point
to th
e program.
Importa
il namespace System
La fu
nzio
ne prin
cipale deve esse
re
chiamata Main
Stampa su
console
Il nome del file
e quello della cla
sse
posso
no esse
re dive
rsi
Importa
il namespace System
La fu
nzio
ne prin
cipale deve esse
re
chiamata Main
Stampa su
console
Il nome del file
e quello della cla
sse
posso
no esse
re dive
rsi
21
A. Longheu –Tecniche di programmazione avanzata
�Lo svilu
ppo può ch
iaramente esse
re fa
tto anche da
IDE come il Visu
al Studio, che offro
no il valore
aggiunto della syn
tax
highlightin
g, indentazio
ne
automatica
, completamento automatico
�To cre
ate th
e "H
ello W
orld
" program in
the Visu
al
Studio IDE, choose File�New Project
from the
menu to
olbar, e
selezio
nare “C
onsole Applica
tion”
nella se
zione Visu
al C
#�Windows
�Dopo avere scritto
il codice
sorgente, si e
segue la
compilazio
ne ch
e genera il co
dice
.exe;
Hello W
orld
22
A. Longheu –Tecniche di programmazione avanzata
�The .exe file
contains
op-co
des
writte
n in Micro
soft
Interm
ediate La
nguage (M
SIL); in
additio
n to
producin
g th
e
IL code (w
hich
is similar in
spirit to
Java's b
yte-co
de), th
e
compiler cre
ates a read-only
segment of the .exe file
in
which
it inserts
a sta
ndard Win32 executable header.
The
compiler desig
nates
an entry
point with
in the read-only
segment; th
e operatin
g syste
m lo
ader ju
mps to
that e
ntry
point w
hen yo
u ru
n th
e program, ju
st as it w
ould fo
r any
Windows p
rogram.
�l’esecuzio
ne può esse
re fa
tta dall’ID
E o da rig
a di co
mando
�The operatin
g syste
m ca
nnot e
xecute dire
ctly the IL co
de,
indeed th
e entry p
oint in
the W
in32 header a
ctually ju
mp to
the .N
ET Ju
st In Time (JIT
) compiler, w
hich
produces n
ative
CPU instru
ctions (note however that it
generates machine
language co
de only fo
r require
d fu
nctio
n)
Hello W
orld
23
A. Longheu –Tecniche di programmazione avanzata
Stru
ttura di u
n programma C#
Programma
namespace A {...}
namespace B {...}
namespace C {...}
class X
{...}cla
ss Y {...}
class Z
{...}
File1.cs
File2.cs
File3.cs
�Se il n
amespace non è
specifica
to => default n
amespace (a
nonimo)
�I n
amespace posso
no co
ntenere stru
cts, interfa
ces, d
elegates e
enums
�I N
amespace posso
no esse
re usati in
altri file
24
A. Longheu –Tecniche di programmazione avanzata
Namespaces (C#) VS Packages (Ja
va)
25
A. Longheu –Tecniche di programmazione avanzata
�Java does n
ot a
llow m
ultip
le packa
ges in
the sa
me
source
file
, while
C#
does
allow
multip
le
namespaces in
a sin
gle .cs file
�In Java, Packa
ges
and cla
sses
are mapped to
dire
ctorie
s and file
s, whereas
Namespaces
and
classe
s are not m
apped to
dire
ctorie
s and file
s
�Java has visib
ility packa
ge, C
# has o
nly visib
ility internal (!=
namespace)
Namespaces (C#) VS Packages (Ja
va)
26
A. Longheu –Tecniche di programmazione avanzata
Visib
ility Modifie
r "internal"
�Visib
ility internal re
fers to
what is visib
le durin
g a
compilatio
n
�csc A
.cs B.cs C
.cs �All in
ternal m
embers o
f A, B
, C se
e each other.
�csc /a
ddmodule:A.netm
odule,B.netm
odule C.cs
�C se
es th
e in
ternal m
embers o
f A and B
�(A and B m
ay b
e writte
n in
diffe
rent la
nguages)
Namespaces (C#) VS Packages (Ja
va)
27
A. Longheu –Tecniche di programmazione avanzata
usin
g Syste
m;
class P
rog {sta
tic void Main() {
Counter c =
new Counter();
c.Add(3); c.A
dd(5);
Console.W
riteLin
e("va
l = " +
c.Val());
}}
usin
g Syste
m;
class P
rog {sta
tic void Main() {
Counter c =
new Counter();
c.Add(3); c.A
dd(5);
Console.W
riteLin
e("va
l = " +
c.Val());
}} Un programma in
2 File
cla
ss C
ou
nte
r {
int v
al =
0;
public
void
Ad
d (in
t x) { v
al =
val +
x; }
public
int V
al () { re
turn
val; }
} cla
ss C
ou
nte
r {
int v
al =
0;
public
void
Ad
d (in
t x) { v
al =
val +
x; }
public
int V
al () { re
turn
val; }
}
Prog.cs
Counter.cs
Compilazione
csc /target:e
xeCounter.cs P
rog.cs
Execuzione
Prog
Uso delle DLL
csc /t:library
Counter.cs
=> generates C
ounter.d
ll
csc /r:Counter.d
llProg.cs
=> generates P
rog.exe
28
A. Longheu –Tecniche di programmazione avanzata
Identifica
tori
Sintassi
Identifie
r = (le
tter | '_
' | '@') {le
tter | d
igit | '_
'}.•Unico
de!
•Case-se
nsitive
•"@
" perm
ette
di u
sare parole ch
iave co
me identifica
tori
-if
... Parola ch
iave
-@if... Id
entifica
tore
•Posso
no co
ntenere se
quenze di esca
pe Unico
de (e
.g. \u
03c0 per
π)Esempi
someName
sum_of3
_10perce
nt
@while
identifica
tore w
hile
πidentifica
tore π
\u03c0
identifica
tore π
b\u0061ck
identifica
tore back
29
A. Longheu –Tecniche di programmazione avanzata
Parole ch
iave
abstra
ctas
base
bool
break
byte
case
catch
char
checke
dcla
ssconst
contin
ue
decim
al
default
delegate
do
double
else
enum
event
explicit
exte
rnfalse
finally
fixed
float
for
foreach
goto
ifimplicit
inint
interfa
ceinternal
islock
long
namespace
new
null
object
operator
out
overrid
eparams
priva
teprotecte
dpublic
readonly
ref
return
sbyte
sealed
short
sizeof
stacka
lloc
static
string
struct
switch
this
throw
true
trytyp
eof
uint
ulong
unchecke
dunsafe
ushort
usin
gvirtu
al
void
volatile
while
77 parole ch
iave in
C# risp
etto
alle 47 di Ja
va
30
A. Longheu –Tecniche di programmazione avanzata
Naming
Maiuscole/minuscole
�Le parole scritte
in m
aiusco
lo (e
s. ShowDialo
g)
�La prim
a lette
ra in
maiusco
lo ecce
tto ch
e per le
varia
bili p
rivate o
locali, le
costa
nti e
i campi
constan
ts maiu
scole
SIZE, M
AX_V
ALU
Elocal variab
les minusco
lei, to
p, su
mprivate field
sminusco
le data, lastE
lement
public field
smaiu
scole
Width, B
ufferLen
gth
properties
maiu
scole
Length, Fu
llNam
eenumeratio
n co
nstan
tsmaiu
scole
Red, B
lue
meth
ods
maiu
scole
Add, In
dexO
ftyp
esmaiu
scole
Strin
gBuilder
pred
efined typ
es minusco
leint, strin
gnam
espaces
maiu
scole
System
, Collectio
ns
La prim
a parola
•Nomi d
i funzio
ni vo
id devono in
iziare co
n un ve
rbo (e
.g. G
etHash
Cod
e)
•Gli a
ltri nomi co
n un so
stantivo
(e.g. size
, IndexO
f, Collection
s)•Gli e
numerativi o
i booleani p
osso
no in
iziare co
n un aggettivo
(Red, E
mpty)
31
A. Longheu –Tecniche di programmazione avanzata
Numeri In
teri
Sintassi
DecConsta
nt =
digit {d
igit} {In
tSuffix}.
HexC
onsta
nt =
"0x" h
exD
igit {h
exD
igit} {In
tSuffix}.
IntSuffix =
'u' | 'U
' | 'l' | 'L'.Type
senza su
ffisso: il p
iùpicco
lo fra
int, u
int, lo
ng, u
long
suffisso
u, U
: il p
iùpicco
lo fra
uint, u
long
suffissi l, L:
il più
picco
lo fra
long, u
long
Esempi
17
int
9876543210
long
17Llong
17uuint
0x3fin
t0x10000
long
0x3fL
long
32
A. Longheu –Tecniche di programmazione avanzata
Numeri in
Virg
ola m
obile
Sintassi (s
emplific
ata)
RealConsta
nt
= [D
igits] ["." [D
igits]] [E
xp] [R
ealSuffix].
deve co
ntenere almeno una cifra
e ".", o
ppure Exp
Digits
= digit {d
igit}.
Exp =
("e" | "E
") ["+" | "-"] D
igits.
RealSuffix
= "f" | "F
" | "d" | "D
" | "m" | "M
".Type
senza su
ffisso: d
ouble
suffisso
f, F:
float
suffisso
d, D
: double
suffisso
m, M
: decim
al
Examples
3.14
double
1E-2
double
.1double
10f
float
33
A. Longheu –Tecniche di programmazione avanzata
Strin
ghe e co
stanti ca
ratte
re
Sintassi
CharConsta
nt =
' char '.
Strin
gConsta
nt =
" {char} ".
char p
uò esse
re qualsia
si caratte
re tra
nne virg
olette
, fine lin
ea e \
Escape sequences
\''
\""
\\\
\00x0000
\a0x0007 (a
lert)
\b0x0008 (b
acksp
ace)
\f0x000c (fo
rm fe
ed)
\n0x000a (n
ew lin
e)
\r0x000d (ca
rriage re
turn)
\t0x0009 (h
orizo
ntal ta
b)
\v0x000b (ve
rtical ta
b)
Unicode-or hexadecimal escape sequences
\u0061a
\x0061a
34
A. Longheu –Tecniche di programmazione avanzata
Strin
ghe e co
stanti ca
ratte
re (2
)
Esempio di sequenze di escape
"file \"C
:\\sample.txt\""
file "C
:\sample.txt"
"file \x0
022C:\u
005csa
mple.txt\x0
022"
Se la strin
ga èpreceduta da @
•\non è
consid
erato ca
ratte
re di esca
pe
•Ogni “
deve esse
re ra
ddoppiata
•La strin
ga può andare a ca
po
Esem
pio
@"file
file
""C:\sa
mple.txt""“
"C:\sa
mple.txt"
35
A. Longheu –Tecniche di programmazione avanzata
Commenti
Su sin
gola lin
ea
// un co
mmento
Delim
itati
/* un’altro
commento */
(non uno dentro
l’altro
)
Documentazio
ne
/// un co
mmento per la
documentazio
ne
36
A. Longheu –Tecniche di programmazione avanzata
Tipi d
i datoTypes
Value Types
Reference Types
Pointers
Simple Types
EnumsStructs
ClassesInterf.
ArrayDelegates
bool
charsbyte
short
int
long
byte
ushort
uint
ulong
float
double
decimal
Tutti i tip
i sono deriva
ti da object
-Posso
no esse
re asse
gnati a
d una va
riabile di tip
o object
-Tutti i m
etodi di object p
osso
no esse
re applica
ti a tu
tti i tipi
Tipi definiti d
all’utente
Tipi non esistenti in
Java
37
A. Longheu –Tecniche di programmazione avanzata
Tipi d
i dato
�UnprogrammaC# in
fatti p
uò esse
re defin
ito co
me una
collezio
neditip
i�
Tutti
idatie il
codice
sonodefin
itiall’in
ternodeitip
i, non
esisto
noquindi fu
nzio
nio va
riabiliglobali
�I tip
i contengono:
�Data m
embers
�Fields, co
nsta
nts, a
rrays
�Events
�Functio
n m
embers
�Methods, o
perators, co
nstru
ctors, d
estru
ctors
�Propertie
s, indexers
�Altri tip
i�Classe
s, structs, e
nums, in
terfa
ces
38
A. Longheu –Tecniche di programmazione avanzata
Tipi d
i dato
�I tip
i posso
noesse
reista
nzia
ti…�…e quindiutilizza
ti: chiamandometodi, g
et a
nd
set p
ropertie
s, etc.
�Posso
noesse
reconvertiti
daun tip
oad un’altro
�Im
plicita
mente
o esplicita
mente
�I tip
i sonoorganizza
ti�Namespaces, file
s, asse
mblies
�Itip
i hannoun’organizza
zionegerarch
ica�Sono disp
onibili d
ue prin
cipali ca
tegorie
: tipi va
lue
e tip
i riferim
ento
39
A. Longheu –Tecniche di programmazione avanzata
Tipo rife
rimento e tip
o va
lore
Valore
Riferim
ento
contiene
valore
riferim
ento
memorizzata
stack
heap
inizializzata
0, fa
lse, '\0
'null
assegnamento
copia il v
alore
copia il rife
rimento
esempio
int i =
17;
strin
g s = "H
ello";
int j= i;
strin
g s1= s;
17
i
17
j
ss1
H e l l o
40
A. Longheu –Tecniche di programmazione avanzata
�Vantaggitip
i value
�No
heap
allocatio
n,
quindi
minor
appesantim
ento
del G
C
�Più
effice
nza
nell’u
sodella
memoria
�Minor re
ference in
dire
ction
�Unifie
d typ
e syste
m
�Nessu
na
dico
tomia
prim
itive/object
(ecco
perch
è“Unifie
d”)
Tipi: U
nifie
d Type Syste
m
41
A. Longheu –Tecniche di programmazione avanzata
Tipi p
rimitivi
long fo
rmin Ja
varange
sbyte
Syste
m.SByte
byte
-128 .. 1
27
byte
Syste
m.Byte
---0 .. 2
55
short
Syste
m.In
t16
short
-32768 .. 3
2767
ushort
Syste
m.UInt16
---0 .. 6
5535
int
Syste
m.In
t32
int
-231.. 2
31-1
uint
Syste
m.UInt32
---0 .. 2
32 -1
long
Syste
m.In
t64
long
-263.. 2
63-1
ulong
Syste
m.UInt64
---0 .. 2
64-1
float
Syste
m.Single
float
±1.5E-45 .. ±
3.4E38 (3
2 Bit)
double
Syste
m.Double
double
±5E-324 .. ±
1.7E308 (6
4 Bit)
decim
al
Syste
m.Decim
al---
±1E-28 .. ±
7.9E28 (1
28 Bit)
bool
Syste
m.Booleanboolean
true, fa
lsechar
Syste
m.Char
char
Unico
decharacte
r
Risp
etto
ai tip
i a virg
ola m
obile, il tip
o decimalècaratte
rizzato da una
maggiore precisio
ne (2
9 cifre
significa
tive vs 7
di flo
at e
15 di d
ouble) e
da un in
terva
llo rid
otto
che lo re
ndono adatto
per ca
lcoli fin
anzia
ri.
42
A. Longheu –Tecniche di programmazione avanzata
Tipi p
rimitivi
43
A. Longheu –Tecniche di programmazione avanzata
Tipi p
redefin
iti:floatin
gpoint
�Segue lo sta
ndard IE
EE 754
�Supporta
±0, ±
infin
ito, N
aN
Syste
mT
yp
eB
yte
sT
ipo
C#
Syste
m.S
ing
le4
�flo
at
Syste
m.D
ou
ble
8d
ou
ble
44
A. Longheu –Tecniche di programmazione avanzata
Tipi p
redefin
iti:decim
al
�128bits
�96 bits
scalate di u
na potenza di 10
�Non su
pporta
±0, ±
infin
ito, N
aN
Syste
mT
yp
eB
yte
sT
ipo
C#
Syste
m.D
ecim
al
16
decim
al
Allintegertyp
escan beimplicitly
converte
dto
a decim
al
type
Conversio
ns b
etween decim
al a
nd flo
atin
g typ
es re
quire
explicit co
nversio
ndue to
possib
leloss
45
A. Longheu –Tecniche di programmazione avanzata
Tipi p
redefin
iti:bool
�Rappresenta i va
lori lo
gici
�I su
oivalori so
no: tru
ee fa
lse�
Non si p
osso
no usare 1 e 0
�Non esiste
una co
nversio
ne sta
ndard co
n altri tip
i
Syste
mT
yp
eB
yte
sT
ipo
C#
Syste
m.B
oo
lean
1 (2
per a
rray)
bo
ol
46
A. Longheu –Tecniche di programmazione avanzata
Tipi p
redefin
iti:char
�Rappresenta un ca
ratte
re UNICODE
�Lite
rals
�‘A’// S
implecharacte
r�‘\u
0041’// U
nico
de
�‘\x0
041’// U
nsig
ned sh
ort h
exadecim
al
�‘\n
’// E
scape se
quence ch
aracte
r
Syste
mT
yp
eB
yte
sT
ipo
C#
Syste
m.c
ha
r2
ch
ar
47
A. Longheu –Tecniche di programmazione avanzata
decim
al
128 bit in
virgola fissa
(-1)s* c *
10
-es =
0 or 1
0 <= c <
296
0 <= e <= 28
Per le
operazio
ni
•Con grandi n
umeri
•Precisio
ne alta (e
.g. 0
.1 = 1 * 10
-1)
=> Necessa
ri nei ca
lcoli fin
anzia
ri
48
A. Longheu –Tecniche di programmazione avanzata
�Object
�strin
g
Tipi p
redefin
iti:reference
type
49
A. Longheu –Tecniche di programmazione avanzata
Object
�Rootof o
bject
hierarch
y�
Storage(book ke
eping) o
verhead
�0 byte
sforvaluetyp
es
�8 byte
sforreference
types
�Anactu
alreference
(notthe object) u
ses4 byte
s, sin
ce m
emory is a
llocated in
chunks o
f 4 byte
s at a
tim
e
Syste
mT
yp
eB
yte
sT
ipo
C#
Syste
m.O
bje
ct
0/8
ove
rhead
ob
ject
50
A. Longheu –Tecniche di programmazione avanzata
C#: La
Classe
Syste
m.Object
�La cla
sse Syste
m.Object
(cui co
rrisponde l’a
lias o
bject) svo
lge in
C# il ru
olo della cla
sse Object
(java.lang.Object) d
i Java
�èla ca
postip
ite di tu
tte le cla
ssi�defin
isce i m
etodi E
quals(virtu
ale), G
etType, T
oStrin
g(virtu
ale),
GetHashCode(virtu
ale),
�defin
isce le fu
nzio
ni sta
tiche Equals/2
e ReferenceEquals/2
�defin
isce
inoltre
alcu
ni
metodi
protetti
come
Finalize
, Memberw
iseClone
�ATTENZIONE:
Equals
per
default
verifica
l’uguaglianza
fra
riferim
enti,
ma alcu
ne cla
ssi deriva
te posso
no rid
efin
irlo e/o
posso
no defin
ire l’o
peratore =
=. A
d esempio, strin
grid
efin
isce =
=
così
da ve
rificare l’u
guaglianza di co
ntenuto, m
a non
fa lo stesso
con Equals!
51
A. Longheu –Tecniche di programmazione avanzata
Strin
g
�Animmutablesequence
of U
nico
decharacte
rs�Reference
type
�Specia
l syntax fo
rlite
rals
�strin
gs =
“I am
a strin
g”;
SystemType
Bytes
Tipo C#
System.Strin
gMinimo 20
strin
g
52
A. Longheu –Tecniche di programmazione avanzata
C#vs
JAVA: S
TRINGHE
Java
�Le strin
ghe so
no ista
nze
della cla
sse Strin
g�
Si cre
ano nuove ista
nze
stringa co
n new
�Si cre
ano nuove ista
nze
specifica
ndo strin
ghe co
stanti
("ciao")
�L'o
peratore == va
le fra
rife
rimenti (n
o aliasin
g):
l'identità
di co
ntenuto è
verifica
ta dal m
etodo equals
�L'o
peratore
!= va
le fra
rife
rimenti (n
o aliasin
g): la
dive
rsitàdi co
ntenuto è
contro
llata da !e
quals
C#
�Le strin
ghe so
no ista
nze
della cla
sse predefin
ita strin
g�
Non si p
osso
no cre
are nuove
istanze strin
ga co
n new
�Si cre
ano nuove ista
nze
specifica
ndo strin
ghe co
stanti
("ciao")
�L'o
peratore == è
overlo
aded
per le
stringhe e va
luta
l'identità
di co
ntenuto (n
on
esiste
equals)
�L'o
peratore !=
èoverlo
aded
per le
stringhe e va
luta la
dive
rsitàdi co
ntenuto (n
on
esiste
equals)
53
A. Longheu –Tecniche di programmazione avanzata
Test U
guaglianza In
C#
usin
gSystem
;class E
sempio5
{public static
voidMain
(){strin
gs1 = "ciao
", s2 = "ciao
"; // new
string è
ERRATO
Console.W
riteLine((s1
==s2) ? "u
guali" : "d
iverse");Perso
na p
1 = new
Perso
na("Joh
n", 2
3),
p2 = new
Person
a("Holly", 1
8);
Console.W
riteLine((p
1==p2) ? "u
guali" : "d
iverse");}}
class Perso
na {
stringnome;
inteta;
public P
ersona(strin
gnome, in
teta){
this.n
ome=
nome;
this.eta
=eta;}
l'operatore == è
ridefin
ito per strin
g→
test ve
rifica l' id
entità
di contenuto
l'operatore == è
ridefin
ito per strin
g→
test ve
rifica l' id
entità
di contenuto
l'operatore == non è
ridefin
ito per persona
→test fra
riferim
enti (a
liasin
g)
l'operatore == non è
ridefin
ito per persona
→test fra
riferim
enti (a
liasin
g)
54
A. Longheu –Tecniche di programmazione avanzata
Syste
m.Strin
g
Può esse
re usata co
me il tip
o sta
ndard strin
g
string s =
"Alfonso";
Note
�Le Strin
gs n
on posso
no esse
re m
odifica
te (tip
o Strin
gBuilder
per m
odifica
re)
�Posso
no esse
re co
ncatenate +: "D
on " +
s�
Posso
no esse
re in
dicizza
te: s[i]
�Calco
lo della lu
nghezza
: s.Length
�Le strin
ghe so
no dei rife
rimenti e
, quindi, a
dotta
no la se
mantica
dei rife
rimenti n
ella asse
gnazio
ni
�== e !=
confro
ntano il co
ntenuto: if (s =
= "A
lfonso") ...
�La cla
sse Strin
g defin
isce I m
etodi p
er m
anipolare le strin
ghe:
CompareTo, In
dexO
f, StartsW
ith, S
ubstrin
g, ...
55
A. Longheu –Tecniche di programmazione avanzata
User-d
efin
edTypes
�Enumeratio
ns
enum
�Arra
ysint[], strin
g[]
�Interfa
ceinterfa
ce
�Reference
type
class
�Valuetyp
e
struct
�Functio
npointer
delegate
56
A. Longheu –Tecniche di programmazione avanzata
Compatib
ilitàfra
i tipi p
rimitivi
Le se
guenti a
ssegnazio
ni so
no va
lide
intVar =
shortVar;
intVar =
charVar;
floatVar = charVar;
decimalVar = (decimal)doubleVar;
Atte
nzio
ne alle co
nversio
ni co
n possib
ile perdita
(long�float�
long, il n
umero long potre
bbe ca
mbiare)
decim
al
double
float
long
int
short
sbyte
ulong
uint
ushort
byte
char
Cast
Obbligatorio
57
A. Longheu –Tecniche di programmazione avanzata
�Im
plicit
conversio
ns
�Occu
r automatica
lly
�Guaranteed to
succe
ed
�No in
form
atio
n (p
recisio
n) lo
ss
�Explicit co
nversio
ns
�Require
a ca
st
�May n
ot su
cceed
�Inform
atio
n (p
recisio
n) m
ight b
e lost
�Both im
plicit a
nd explicit co
nversio
ns ca
n be user-
defin
ed
Tipi: co
nversio
ni
58
A. Longheu –Tecniche di programmazione avanzata
Esempi:
�intx =
123456;
�long y =
x; // implicit
�short z =
(short)x; // e
xplicit
�double d = 1.2345678901234;
�float f =
(float)d
; // explicit
�long l =
(long)d; // e
xplicit
Tipi: co
nversio
ni
59
A. Longheu –Tecniche di programmazione avanzata
�Come in C++, in C# è
possib
ile definire operatori di
conversione di tipo per
specifica
re come convertire
(automatica
mente o m
eno) u
n tip
o in
un altro
�Operatori d
i conversio
ne:
public static o
perato
r implicit tip
oFinale(tip
oIniz v)
{ return valo
reCon
vertito }public static o
perato
r explicit tip
oFinale(tip
oIniz v)
{ return valo
reCon
vertito}
�Gli operatori
impliciti
vengono chiamati
automatica
mente
quando necessa
rio, m
entre
quelli e
spliciti ve
ngono ch
iamati
solo in
presenza di u
na co
nversio
ne esplicita
di tip
o (ca
st)
Tipi: co
nversio
ni
60
A. Longheu –Tecniche di programmazione avanzata
Esempio di co
nversio
ne im
plicita
automatica
da Countera int:
Cou
nter
c = new
Cou
nter(); c.stato
= 18;
int valore =
c; // conv. im
plicita d
a Cou
nter
a int
...public static
implicit
operator in
t(Cou
nter
c){return c.stato;}
public class C
ounter
{ // una classe q
ualsiasi
private in
tval;
public C
ounter(){ val=
0;}
public in
t stato { // p
roprietà
get
{ return val; }
set{ if(valu
e>0) val=
value; }
}} Tipi: co
nversio
ni
61
A. Longheu –Tecniche di programmazione avanzata
Counter
c = new
Counter(); c.stato
= 18
;int valo
re = (in
t)c; // conv. esp
licita Counter
-> int
publicstaticexplicit
operator in
t(Counterc){
return c.sta
to;}
public
class Counter
{ // una classe q
ualsiasi
intval;
public C
ounter(){ val=
0;}
public in
t stato { // p
roprietà
get { retu
rn val; }
set { if(value>
0) val=
value; }
}}
�Esempio di co
nversio
ne esplicita
(quindi n
on automatica
, richiede un ca
st)da Countera int:
Tipi: co
nversio
ni
�Questo
esempio ed il p
recedente so
no entra
mbi p
ossib
ili; in generale, si
deve defin
ire una co
nversio
ne esplicita
se il crite
rio sta
bilito
potre
bbe non
avere succe
sso e/o se si
posso
no verifica
re perdite di precisio
ne, se
invece si
èsce
lto un crite
rio che NON fallisce
, si
può adotta
re quella
implicita
62
A. Longheu –Tecniche di programmazione avanzata
�L'o
peratore asconsente di te
ntare una co
nversio
ne
esplicita
di tip
o (a run-tim
e),
ma senza sca
tenare
un'ecce
zione in
caso di fa
llimento
�Se la conversio
ne non rie
sce, vie
ne semplice
mente
restitu
ito null
...Counter
c = new
Cou
nter();
if((c asint)!=
null) {
int valo
re=c+
+;
} Tipi: co
nversio
ni
63
A. Longheu –Tecniche di programmazione avanzata
Enumeratio
n
Lista di co
stanti
Dichiarazione(live
llo del n
amespace)
enum
Color {R
ed, B
lue, G
reen} // va
lori: 0
, 1, 2
enum
Acce
ss {Perso
nal=1, G
roup=2, A
ll=4}
enum
Acce
ss1 : b
yte{Perso
nal=1, G
roup=2, A
ll=4}
UsoColor c = Color.Blue;// un enumeratore deve essere qualific
ato
Access a = Access.Perso
nal | Access.G
roup;
// a contiene un insieme di valori
if ((Access1.Perso
nal & a) !=
0) Console.Write
Line("a
ccess granted");
UsoColor c = Color.Blue;// un enumeratore deve essere qualific
ato
Access a = Access.Perso
nal | Access.G
roup;
// a contiene un insieme di valori
if ((Access1.Perso
nal & a) !=
0) Console.Write
Line("a
ccess granted");
64
A. Longheu –Tecniche di programmazione avanzata
Operazio
ni su
lle enumerazio
ni
Operazio
ni va
lide
confro
nto
if (c == Color.R
ed) ...
if (c> Color.R
ed && c <
= Color.G
reen) ...
+, -
c = c +
2;
++, --
c++;
&if ((c &
Color.R
ed) =
= 0) ...
|c =
c | Color.B
lue;
~c =
~ Color.R
ed;
Il compilatore non ve
rifica se
il risultato è
un va
lore apparte
nente
all’in
sieme dei va
lori va
lidi
Nota
-Non è
possib
ile asse
gnare ad un in
t (tranne co
n il ca
st).
-Enumeratio
n deriva
da object ( E
quals, T
oStrin
g, ...).
-La cla
sse System
.Enum
esporta
operazio
ni su
lle enumerazio
ni
(GetN
ame, Form
at, GetV
alues, ...).
65
A. Longheu –Tecniche di programmazione avanzata
Nullable typ
es
�I tip
i nullable sono ista
nze della stru
ttura Syste
m.Nullable. Un tip
o
nullable può ra
ppresentare l'in
terva
llo norm
ale di va
lori p
er il
relativo
tip
o di va
lore so
ttosta
nte, p
iùun va
lore nullaggiuntivo
. �
Ad esempio, al valore Nullable<Int32>, che si
legge "Nullable di
Int32",
può esse
re asse
gnato qualsia
si valore compreso tra
-
2147483648 e 2147483647 oppure il
valore null.
A un valore
Nullable<bool> può in
vece esse
re asse
gnato il va
lore tru
eo false
oppure null.
�La possib
ilitàdi asse
gnare null
a tip
i numerici
e Boolean risu
lta
partico
larm
ente utile
quanto si u
tilizzano database e altri tip
idi d
ati
contenenti e
lementi a
cui n
on sa
rebbe possib
ile asse
gnare un va
lore.
Ad esempio, in un campo Boolean di un database è
possib
ile
arch
iviare il va
lore tru
eo falseoppure è
possib
ile lascia
rlo in
defin
ito.
�Il n
ullable typ
e se
rve per e
stendere ai tip
i prim
itivi il valore
null g
iàusato per i tip
i riferim
ento
66
A. Longheu –Tecniche di programmazione avanzata
class N
ullableExample {
static vo
id Main() {
int? n
um = null;
if (num.HasValue == tru
e)
{ Syste
m.Console.W
riteLin
e("n
um = " +
num.Value); }
else
{ S
ystem.Console.W
riteLin
e("n
um = Null"); }
//y is set to
zero
int y =
num.GetValueOrDefault();
// num.Value th
rows a
n In
validOperatio
nExce
ptio
n if n
um.HasValue
is false
try { y =
num.Value; }
catch
(Syste
m.In
validOperatio
nExce
ptio
n e)
{ Syste
m.Console.W
riteLin
e(e.Messa
ge); }
}}
Nullable typ
es
67
A. Longheu –Tecniche di programmazione avanzata
�Non è
possib
ile cre
are un tip
o nullable basato su
un tip
o di
riferim
ento. (i
tipi di rife
rimento supporta
no già
il valore
null)
�La
sintassi
T?
èuna
form
a
abbrevia
ta
di
Syste
m.Nullable<T>, in
cui T
èun tip
o di va
lore. Le
due
form
e so
no in
terca
mbiabili.
�Asse
gnazio
ne un va
lore a un tip
o nullable in
t? x = 10; o
double? d
= 4.108;
�Utilizza
re la proprie
tàSyste
m.Nullable.GetValueOrDefault
per re
stituire
il valore asse
gnato o il va
lore predefin
ito per il
tipo sotto
stante se il valore è
null,
ad esempio int j =
x.GetValueOrDefault();
�I tip
i nullable nidifica
ti non sono consentiti,
ad esempio:
Nullable<Nullable<int>> n; N
ON ve
rràcompilata.
Nullable typ
es
68
A. Longheu –Tecniche di programmazione avanzata
�Utilizza
re le
proprie
tàin so
la le
ttura HasValuee Valueper
verifica
re se
il valore è
null e
per re
cuperarlo
, ad esempio
if(x.HasValue) j =
x.Value;
�HasValue restitu
isce tru
e se la varia
bile contiene un
valore, fa
lse se
ènull.
�La proprie
tàValue re
stituisce
un va
lore se
ne è
stato
asse
gnato uno,
in caso contra
rio vie
ne generata
un'ecce
zione Syste
m.In
validOperatio
nExce
ptio
n.
�Per
imposta
zione predefin
ita,
una varia
bile di tip
o
nullable im
posta
HasValue su
false
. Value è
indefin
ito.
�Utilizza
re
l'operatore
?? per
asse
gnare
un
valore
predefin
ito ch
e ve
rràapplica
to quando un tip
o nullable, il
cui va
lore co
rrente è
null, vie
ne asse
gnato a un tip
o non
nullable, a
d esempio in
t? x = null; in
t y = x ?? -1
;
Nullable typ
es
69
A. Longheu –Tecniche di programmazione avanzata
Boxin
g/Unboxin
g
�I tip
i valore (in
t, struct, e
num) so
no co
mpatib
ili con object (n
on so
no necessa
rie cla
ssi wrapper)!
Boxing
l’istruzio
ne
object obj = 3;
trasfo
rma il va
lore nell’o
ggetto
3 nell’h
eap
Unboxing
l’istruzio
ne
int x = (in
t) obj;
esegue l’o
perazio
ne in
versa
3
obj
70
A. Longheu –Tecniche di programmazione avanzata
Boxin
g/Unboxin
g
�Perm
ette
l’implementazio
ni d
i contenito
ri generici
class Queue {
...public vo
id Enqueue(ob
ject x) {...}public o
bject D
equeue() {...}
...}
�Queue può esse
re usato sia
per i rife
rimenti ch
e per i
valoriQueue q
= new
Queue();
q.Enqueue(n
ew Rectan
gle());
q.Enqueue(3
);Rectan
gle r =
(Rectan
gle) q
.Dequeue();
int x =
(int) q
.Dequeue();
71
A. Longheu –Tecniche di programmazione avanzata
�In Ja
va, i tip
i prim
itivi non so
no oggetti
�quando occo
rre
tratta
rli come oggetti,
biso
gna
ricorre
re alle cla
ssi wrapper
�il p
assa
ggio da va
lore prim
itivo a oggetto
e vice
versa
va svo
lto esplicita
mente, per costru
zione o tra
mite
appositi m
etodi (in
tValue, flo
atValue, e
tc)�
In C#,
i tip
i prim
itivi non sono oggetti
ma sono
assim
ilabili a
d essi q
uando fa
comodo
�non esisto
no cla
ssi wrapperesplicite
�il p
assa
ggio da va
lore prim
itivo a oggetto
e vice
versa
avvie
ne automatica
mente, tra
mite un procedimento
noto co
me boxin
g / u
nboxin
g (l'u
nboxin
g rich
iede un
cast)
Boxin
g/Unboxin
g
72
A. Longheu –Tecniche di programmazione avanzata
Boxin
g
�Copies a
value typ
e in
to a re
ference typ
e (o
bject)
�Each value typ
e has
corre
sponding “hidden”reference
type
�Note th
at a
reference-typ
e co
py is m
ade of th
e va
lue typ
e�
Value typ
es a
re never a
liased
�Value typ
e is
converte
d implicitly
to object,
a reference
type
�Esse
ntially a
n “u
p ca
st”
73
A. Longheu –Tecniche di programmazione avanzata
Unboxin
g
�Inverse
operatio
n of b
oxin
g�
Copies th
e va
lue out o
f the box
�Copies fro
m re
ference typ
e to
value typ
e�
Require
s an explicit co
nversio
n�
May n
ot su
cceed (like
all e
xplicit co
nversio
ns)
�Esse
ntially a
“down ca
st”
74
A. Longheu –Tecniche di programmazione avanzata
// bo
xin
g
int
x =
10;
ob
jec
t ob
j=
x;
// un
bo
xin
g
int
y =
(int)o
bj;
x x1
01
0
ob
jo
bj
• •S
ys
tem
.int3
2S
ys
tem
.int3
2• •
10
10
y y1
01
0
Boxin
g/Unboxin
g
�Esempi:
75
A. Longheu –Tecniche di programmazione avanzata
Boxin
g�
Vantaggi:
�Enables p
olym
orphism
acro
ss all typ
es
�Collectio
n cla
sses w
ork w
ith all typ
es
�Elim
inates n
eed fo
r wrapper cla
sses
�Replaces O
LE Automatio
n's V
aria
nt
�In M
icrosoft W
indowsapplica
tions p
rogramming, OLE Automation, is
an in
ter-p
rocess co
mmunica
tion(IP
C) m
echanism
based on Component
Object M
odel(COM) th
at w
as in
tended fo
r use by scrip
ting languages–
orig
inally
Visu
al Basic
–but now are used by
languages
run on
Windows.
It provid
es an infra
structu
re whereby
applica
tions called
autom
ation con
trollerscan acce
ss and m
anipulate (i.e
. set p
ropertie
s of
or ca
ll methods o
n) sh
ared au
tomation
objects
that a
re exporte
d by
other a
pplica
tions. It su
perse
des D
ynamic D
ata Exch
ange(DDE), a
n
older m
echanism
for a
pplica
tions to
contro
l one another. A
s with
DDE,
in OLE Automatio
n the automatio
n contro
ller is
the "clie
nt"
and the
applica
tion exportin
g th
e automatio
n objects is th
e "se
rver".
�Svantaggi
�Perfo
rmance co
st�
The need fo
r boxin
g w
ill decre
ase w
hen th
e CLR
supports g
enerics
(similar
to C++ te
mplates)
76
A. Longheu –Tecniche di programmazione avanzata
Form
atta
zione Output
�Console.W
rite(in
tVal);
�Console.W
riteLin
e(in
tVal);
�Console.W
rite("H
ello {0
}", name);
//�
Console.W
riteLin
e("{0
}= {1
}", x, y);
Placeholder
"{" n ["," w
idth] [":" fo
rmat [p
recisio
n]] "}"
nposizio
ne dell’a
rgomento
width
dimensio
ne m
inima
format
codice
di fo
rmato (e
.g. d
, f, e, x, ...)
precision
numero di cifre
(dopo la virg
ola)
77
A. Longheu –Tecniche di programmazione avanzata
Esempi:
int x =
17;
Console.W
riteLin
e( "{0
}", x);17
Console.W
riteLin
e("{0
,5}", x);
17
Console.W
riteLin
e("{0
:d}", x);
17
Console.W
riteLin
e( "{0
:d5}", x);
00017
Console.W
riteLin
e("{0
:f}", x);17.00
Console.W
riteLin
e("{0
:f1}", x);
17.0
Console.W
riteLin
e( "{0
:E}", x);
1.700000E+001
Console.W
riteLin
e("{0
:E1}", x);
1.7E+001
Console.W
riteLin
e( "{0
:x}", x);11
Console.W
riteLin
e("{0
:x4}", x);
0011
Form
atta
zione Output
78
A. Longheu –Tecniche di programmazione avanzata
Formattazione di strin
ghe:
usin
g System
;usin
g System
.Glob
alization;
class formattazion
e {static void
Main
(){// Form
at a negative in
teger or floatin
g-poin
t number in
various w
ays.Con
sole.WriteLin
e("Stan
dard
Numeric Form
at Specifiers");
string s =
Strin
g.Fo
rmat( "(C
) Curren
cy: . . . . . . . . {0:C}\n
" +"(D
) Decim
al:. . . . . . . . . {0:D}\n
" +"(E
) Scien
tific: . . . . . . . {1:E}\n
" +"(F) Fixed
poin
t:. . . . . . . {1:F}\n
" +"(G
) General:. . . . . . . . . {0
:G}\n
" +" (d
efault):. . . . . . . . {0
} (defau
lt = 'G
')\n" +
"(N) N
umber: . . . . . . . . . {0
:N}\n
" +"(P
) Percen
t:. . . . . . . . . {1:P}\n
" +"(X
) Hexad
ecimal:. . . . . . . {0
:X}\n
", -123, -7
89.45f);
Con
sole.WriteLin
e(s);…
Form
atta
zione Output
79
A. Longheu –Tecniche di programmazione avanzata
Uscita:
-stringa0-=
-000c-
Stan
dard
Numeric Form
at Specifiers
(C) C
urren
cy: . . . . . . . . -? 123,00
(D) D
ecimal:. . . . . . . . . -1
23
(E) S
cientific: . . . . . . . -7
,894500E+002
(F) Fixed poin
t:. . . . . . . -789,45
(G) G
eneral:. . . . . . . . . -1
23
(defau
lt):. . . . . . . . -123 (d
efault =
'G')
(N) N
umber: . . . . . . . . . -1
23,00
(P) P
ercent:. . . . . . . . . -7
8.945,00%
(R) R
ound-trip
: . . . . . . . -789,45
(X) H
exadecim
al:. . . . . . . FFFFFF85
Form
atta
zione Output
80
A. Longheu –Tecniche di programmazione avanzata
…float i=
43.18F;
s = i.T
oStrin
g("c", n
ew Cultu
reInfo("en
-GB"));
Console.W
riteLine("\n
LOCALIT
AZION Great B
ritain : "+
s+"\n
");s =
i.ToStrin
g("c", n
ew Cultu
reInfo("it-C
H"));
Console.W
riteLine("\n
LOCALIT
AZION Switzerlan
d : "+
s+"\n
");
// Form
at the cu
rrent d
ate in vario
us w
ays.Console.W
riteLine("S
tandard
DateT
ime Fo
rmat S
pecifiers");
DateT
ime th
isDate =
DateT
ime.N
ow;
s = Strin
g.Fo
rmat( "(d
) Short d
ate: . . . . . . . {0:d}\n
" +"(D
) Long date:. . . . . . . . {0
:D}\n
" +"(t) S
hort tim
e: . . . . . . . {0:t}\n
" +"(T
) Long tim
e:. . . . . . . . {0:T}\n
", thisD
ate);Console.W
riteLine(s);}
Form
atta
zione Output
81
A. Longheu –Tecniche di programmazione avanzata
Uscita:
LOCALIT
AZION Great B
ritain : £
43.18
LOCALIT
AZION Switzerlan
d : S
Fr. 43.18
Stan
dard
DateT
ime Form
at Specifiers
(d) S
hort d
ate: . . . . . . . 23/11/2008
(D) Lon
g date:. . . . . . . . d
omenica 2
3 novem
bre 2
008
(t) Short tim
e: . . . . . . . 18.50
(T) Lon
g tim
e:. . . . . . . . 18.50.15
(f) Full d
ate/short tim
e: . . domenica 2
3 novem
bre 2
008 1
8.50
(F) Full d
ate/long tim
e:. . . domenica 2
3 novem
bre 2
008 1
8.50.15
(g) G
eneral d
ate/short tim
e:. 23/11/2008 18.50
(G) G
eneral d
ate/long tim
e: . 23/11/2008 18.50.15
(defau
lt):. . . . . . . . 23/11/2008 18.50.15 (d
efault =
'G')
(M) M
onth:. . . . . . . . . . 2
3 novem
bre
(R) R
FC1123:. . . . . . . . . S
un, 2
3 Nov 2
008 18:50
:15 GMT
(Y) Y
ear: . . . . . . . . . . novem
bre 2
008
Form
atta
zione Output
82
A. Longheu –Tecniche di programmazione avanzata
Output su
File
usin
g System
;usin
g System
.IO;
class Test {
static void Main
() {FileS
tream s =
new
FileStream
("output.txt", FileM
ode.C
reate);Stream
Writer w
= new
Stream
Writer(s);
w.W
riteLine("T
able o
f squares:");
for (in
t i = 0; i <
10; i+
+)
w.W
riteLine("{0
,3}: {1
,5}", i, i*
i);
w.Close();
}}
83
A. Longheu –Tecniche di programmazione avanzata
Uscita:
D:\>
more o
utput.txt
Table o
f squares:
0: 01: 12: 43: 94: 1
65: 2
56: 3
67: 4
98: 6
49: 8
1
Output su
File
84
A. Longheu –Tecniche di programmazione avanzata
Input
Input da tastiera:
int ch
= Console.Read();
Strin
g s =
Console.ReadLin
e();
Input da file
:usin
g System
;usin
g System
.IO;
class Test {
static void Main
() {FileS
tream s =
new
FileStream
("input.txt", FileM
ode.O
pen);
Stream
Read
er r = new
Stream
Read
er(s);strin
g lin
e = r.R
eadLin
e();while (lin
e != null) {
Console.W
riteLine(“Lettu
ra da file…
:”+line);
line =
r.Read
Line();
}r.Close();
}}
85
A. Longheu –Tecniche di programmazione avanzata
Uscita:
Lettu
ra da file
:file da leggere (rig
a1)
Lettu
ra da file
:riga2
Lettu
ra da file
:riga3
Lettu
ra da file
:4...
Lettu
ra da file
:5...
Lettu
ra da file
:penultim
a rig
a (6
)
Lettu
ra da file
:ultim
a (rig
a 7)
Input d
a File
86
A. Longheu –Tecniche di programmazione avanzata
Parametri d
a lin
ea di co
mando
usin
g System
;
class Test {
static void Main
(string[] arg
) {//in
vocato
come T
est value =
3for (in
t i = 0; i <
arg.Len
gth; i+
+)
Console.W
riteLine("{0
}: {1}", i, arg
[i]);//
0: valu
e//
1: =
//2: 3
foreach
(string s in
arg)
Console.W
riteLine(s);
// output:
//valu
e//
=//
3}}