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/