Introduzione a .net con C#
Introduzione a C#
• C# : CLR = Java : JVM
• C# è il linguaggio di riferimento di .NET
• C# è molto simile a java e C++(80%)
Nome del file può essere diverso da hello
NameSpace (=package java)
Main<> main, Case sensitive
C# fondamenti
• Namespace per organizzare le classi
– Equivalenti ai package java
Derivano
da Object
• Data model e Type System
– Value types (primitivi,enumeration,struct)
– Reference type (class,interface,array,delegate)
– Pointers type (ad alcuni tipi)
•Execution model
•Front-end compilation (simile al bytecode)
•Back-end compilation (Just In Time, JIT)
C# fondamenti
•
•
•
•
•
•
•
•
•
•
•
Eccezioni
Interfacce
Threads
Gargage collection
Reflection
Dynamic loading
Properties
Events e delegates
Operator overloading
Boxing/Unboxing
..
Array
Array
Array associativi
Boxing/Unboxing
Boxing/Unboxing
Nuovi tipi in C# (4.0)
• Tuple
– “Typed immutable generics” in grado di
memorizzare fino ad 8 oggetti
– Per memorizzare un numero maggiore di oggetti
bisogna concatenare piu’ tuple!
• Tipi Complex
• BigInteger
Object orientation: ereditarietà
Object orientation: Overriding
Object orientation: Overriding
operatori
Passaggio dei parametri
Named argument , parametri opzionali
Propietà
• Sono particolari metodi che si comportano come un attributo, cioè
possono essere solo letti o scritti.
Indexers
• Come le proprietà più un metodo per usare le
istanze di una classe come un vettore
Delegate, eventi, controlli
• Delegate è un tipo ‘puntatore’ ad un metodo
• Si definisce mediante la parola delegate e la firma del
metodo
delegate void Jolly (String s);
Firma del metodo
Delegate, eventi, controlli
• Per creare valori di un tipo delegate
• new DelegateType(obj.Method);
– Se obj è omesso si intede this
– Se obj è il nome di una classe, Method è un metodo statico
– Method deve avere firma compatibile
• Una variabile delegate memorizza sia l’oggetto (o
classe), sia il metodo
Esempio delegate
Esempio delegate Multicast
class Counter {
private int value=0;
public void add(int v){value+=v;}
}
delegate void Adder(int i);
class Test {
static void Main() {
Counter c1 = new Counter();
Counter c2 = new Counter();
Adder add = new Adder(c1.add);
add+=new Adder(c2.add);
add(3); //chiama c1.add(3) e c2.add(3)
}
}
Delegate, eventi, controlli
• Gli eventi sono variabili delegate dichiarate come campi di una
classe e denotati mediante la parola event
• Un evento può essere attivato somalente da dentro la classe
nella quale è definito
• Esempio
Change
Model
notify
View 1
notify
View 2
Esempio
Esempio
Delegate, eventi, Control
• Controlli: usati nelle GUI ed in ASP.NET
• Un controllo rappresenta un oggetto grafico che ha un contenuto
informativo
• I controlli sono visualizzati all’interno di un form (o in una pagina
web)
• Programmazione visuale (visualStudio 2010)
Eventi e controlli
• Gli eventi (SW) sono generati a seguito di “eventi” fisici (p.e., click
del mouse)
• Tutti gli eventi sono raccolti da un “motore” e consegnati ad Event
handler delle applicazioni. Gli handler devono registrarsi per
ricevere gli eventi
Controllo
Eventi
generati
Attivazione di metodi (handler)
Handler
System’s event Engine
Esempio
Namespace e Assembly
• Namespace serve per controllare la visibilità di
nomi a tempo di compilazione
• Assembly è un componente sw con propria
indentità che può essere caricato a run-time
– Un assembly può contenere più namespace
Namespace c# vs package java
file: B.java
package A;
class B {…}
file: B.java
package A;
class C {…}
file: Test.cs
namespace A;
class B {…}
class C {…}
Samples
A
B.class
MyLib.dll
C.class
•Package = directory
•nome classe = file .class
•Namespace <> directory
•Nome file indipendente da nome
classe
• più classi nello stesso namespace
vanno nello stesso file
Assembly
Namespace A
file A.cs
file B.cs
namespace A
{
class C1 {…}
class C2 {…}
}
Namespace B
namespace B
{
class C4 {…}
class C5 {…}
}
file D.cs
file E.cs
namespace A
{
class C2 {…}
}
namespace B
{
class C6 {…}
}
csc B.cs E.cs assembly
Assembly e namespace sono due concetti ortogonali
.NET Framework
• Un “run-time” (middleware) per l’esecuzione di applicazioni
desktop e distribuite
• Insieme di tool di sviluppo e librerie
Connessioni a
db
GUI
Pagine web
dinamiche
Librerie Specializzate per
un tipo di applicazione
Librerie SW di base language
independent..
Basato su macchina virtuale
Garbage Collection,
Security,Inteoperability,..
Just in time compilation
Versioni di .NET
• .NET 3.0: ulteriore run-time e
librerie
• Windows Presentation Fund.
– Creazione GUI, rimpiazza
WinForm
– Nuovo linguaggio: xaml
• Windows Communication Fund.
– Scambio messaggi fra applicazioni
• Worklow Fundation
– Applicazioni Workflow
• Card Space
– Gestione identità digitale di utenti
Versioni di .NET
• LINQ (Language-Integrated
Query)
– set di funzionalità introdotto in
che migliora la gestione delle
query nella sintassi dei linguaggi
C# e Visual Basic.
• Entity Framework
– Object Oriented Mapping dei di
database
Interoperabilità
Source Code
C#
Visual Basic
Visual C++
Front-end compilers
Common
Intermediate
Language
Stack-based assembly
language machine
(CIL)
Common
Language
Runtime
(CLR)
Back-end compilers
(JIT Compilation)
Windows
Linux
MacOs
Just in Time compilation
Esempio
HelloNS.vb
vbc /target:library Hello.vb
Main.cs
csc /r:HellotNS.dll Main.cs
HelloNS.dll
-------
Main.exe
-------
Base Class Library (BCL)
System.Collections
Contiene: lists, queues, stacks, hashtables,
dictionaries..
System.Diagnostics
Funzioni per diagnostica: event logging,
performance counters,…
System.Globalization
Formato data, monete, numeri, etc.
System.IO
Legge/scrive Stream, connessione al file
system
System.Net
Interfacce ai protocolli di rete, HTTP,
FTP,SMTP,SSL,..
System.Reflection
Proprietà degli oggetti a run time
System.Runtime
Gestione del CLR
System.Security
Servizi di crittografia,..
System.Text
Espressioni regolari
System.Threading
Gestione thread
…..
Esempio
Visual studio 2010
https://www.dreamspark.com/
Mono
Bibliografia e risorse
• .NET Application
Development,
– Hanspeter Mössenböck,
Wolfgang Beer, Dietrich
Birngruber, Albrecht Wöß
– Pearson/Addison Wesley
http://channel9.msdn.com/