C# Framework.NET - Documentation PDF
Document Details
Tags
Summary
This document provides an overview of the C# programming language, including the .NET Framework and its components. It discusses concepts like interoperability, architecture, and compilation. It's aimed at those with a strong background in programming looking to learn specifics about the language and its capabilities within their project.
Full Transcript
# Framework.Net avec C# ## Interoperabilité - Une plate-forme commune - langage supportés: VB.NET, Perl, C++, C#, Eiffel#, J#, JScript - _Commun Language Specification_ (CLS) - Des spécifications identiques pour tous les langages à intégrer. - _Le MSIL_: Un langage intermédiaire ## Une même strat...
# Framework.Net avec C# ## Interoperabilité - Une plate-forme commune - langage supportés: VB.NET, Perl, C++, C#, Eiffel#, J#, JScript - _Commun Language Specification_ (CLS) - Des spécifications identiques pour tous les langages à intégrer. - _Le MSIL_: Un langage intermédiaire ## Une même stratégie pour deux environnements - Des fenêtres *Forms* pour - Des applications Web. - Des applications générales. - Services Web - Interfaces utilisateurs - Données et XML - La description de la structuration données d'application est stockée dans des fichiers XML. ## L'architecture.Net est fondée sur une hiérarchie de classes - Des noms d'espace de classes hiérarchisés - System.WinForms se dénomme System.Windows.Forms en C#. - System.Windows.Forms.Panel est une classe C# de cet espace de noms. - System - System.WinForms - System.Data - System.Data.ADO - System.Data.SQL - System.IO ## Le Common Language Run-Time, ses buts - Développement de services - Permettre une interopérabilité entre les langages - Augmenter la productivité (chacun écrit dans le langage qu'il choisit, le plus adapté, ...) - Services déploiement - Simple, sûr - Gestion des versions - Services à l'exécution - Performance - Extensibilité - Sûreté et disponibilité - Sécurité ## Le Common Language Run-Time se charge de l'exécution - _Commun Language Runtime_ - compilateur _JIT_ du code _MSIL_ - _Garbage Collector_ - Gestionnaire de code - Contrôle de la sécurité - Contrôle de l'exécution - Chargeur de classe - Le CLR travaille avec le code _MSIL_. - Le CLR _implémente_ une bibliothèque de types de données commune. ## La compilation native classique - Compilateurs générant du code natif - Source C# - compilateur natif pour Windows - Code directement exécutable - compilateur natif pour Unix - Code directement exécutable - Le compilateur engendre du code machine dirigé vers un OS spécifique. ## La compilation en bytecode _MSIL_ - Source C# - compilateur C# en code _MSIL_ - Le compilateur engendre un code (bytecode) qui n'est exécutable que par une machine virtuelle. - La machine virtuelle de .Net se nomme le _CLR_. ## CLR Apparament Semblable à JVM - **JAVA** - Compilation - ByteCode - JIT / interprétation - JVM - Interactions - Operating System - **C#, VB.NET, J# ...** - Compilation - _MSIL_ - JIT / interprétation - CLR - Interactions - Operating System ## Common Language Runtime Modèle d'exécution - code source - VB - Comp. VB - J# - Comp. VB - C# - Comp C# - C++ - Comp C++ - _MSIL_ - Assembly - Assembly - Assembly - Assembly - _Compilateur JIT du CLR_ - code natif - Code administré - Code administré - Code administré - Code non administré - Services du _CLR_ - Services du système d'exploitation ## Le Common Language Run-Time communique avec le système - Programme PE en code MSIL - _Commun Language Runtime_ - compilateur _JIT_ du code _MSIL_ - _Garbage Collector_ - Gestionnaire de code - Contrôle de la sécurité - Contrôle de l'exécution - Chargeur de classe - SYSTEME D'EXPLOITATION ## CLR et compilation JIT - Programme PE en code _MSIL_ - _Commun Language Runtime_ - compilateur _JIT_ du code _MSIL_ - Code natif administré - Exécution du code - Appel d'une méthode non compilée - SYSTEME D'EXPLOITATION ## CLR services rendus - Gestion du Code - Conversion du code _MSIL_ en natif - Chargement et exécution du _'managed code'_ - Création et gestion des metadata - Contrôle des types - Insertion et exécution des politiques de sécurité - Gestion mémoire - Gestion multi-langage des exceptions - Interopérabilité entre les objets du framework.NET et les objets COM et les DLLs Win32 - Liaison tardive - Services pour les développeurs (profiling, debugging, ...) ## .Net - Langages: VB.NET, Perl, C++, Cif, Eiffel#, J#, JScript - _Commun Language Specification_ (CLS) - Services Web - Interfaces utilisateurs - Données et XML - Librairie de classes fondamentales - _Commun Language Runtime_ - compilateur _JIT_ du code _MSIL_ - _Garbage Collector_ - Gestionnaire de code - Contrôle de la sécurité - Contrôle de l'exécution - Chargeur de classe - Windows - _SYSTEME D'EXPLOITATION_ - Unix ... ## Le code qui cible le Runtime porte le nom de code administré - Bibliothèque d'objets personnalisés - Runtime - Système d'exploitation/matériel - Bibliothèque de classes - _Code administré_ - ASP.NET (Runtime) - Applications Web managées - Internet Information Services - _Code non administré_ - Applications non managées - Applications managées ## C# - LOO de base de .Net - Dans C# deux catégories d'objets: - Les objets du _tas_ éligibles au _Garbage collector_. - Les objets de type valeur dans la _pile_. ## Les types valeurs - Types valeurs C# | Classe-structure de .NET Framework | nombre de bits ----|---|---| - bool | Boolean | 1 bit - sbyte | SByte | 8 bits - byte | Byte | 8 bits - char | Char | 16 bits - double | Double | 64 bits - float | Single | 32 bits - short | Int16 | 16 bits - int | Int32 | 32 bits - long | Int64 | 64 bits - ushort | UInt16 | 16 bits - uint | UInt32 | 32 bits - ulong | UInt64 | 64 bits - decimal | Decimal | 128 bits ## C# vs Java - **C#** | **Java** ----|---| - int[] t = new int[n]; | int[] t = new int [n]; - if (P) { E1 } else { E2 } | if (P) { E1 } else { E2} - do..., while..., for..., | do..., while..., for..., - ++, --, switch, break, ... | ++, --, switch, break, ... ## Syntaxe d'une classe en C# - using System; - namespace ExemplesCs ; - class Truc { ... } - class Chose { ... } - Equivalent logique du _import_ Java - Equivalent logique du _package_ Java ## Les struct sont des types valeurs - struct StructAmoi { - int b; - void meth(int a) { b = 1000 + a; } - attribut - méthode - objet du type _struct_ instancié - StructAmoi x = new StructAmoi(); ## Boxing et UnBoxing - int a = 15; - Object x = a; - int b = (int) x; - _Boxing_ - _UnBoxing_ - Tous les types héritent de _Object_. ## Paramètres valeur - static int SP ( int x) { return x + 5 ; } - programme - SP (x) - appelant - appel - copie - sous programme SP - manipulation locale de la copie x' - Appel: SP (a); ## Paramètres référence - static int SP (int x, ref int y) { return x + 5 ; } - programme - X - SP (x) - appelant - connexion directe ! - sous programme SP - chaque utilisation d'un paramètre a lieu directement sur la variable effective - Appel: SP (a, ref b); ## Paramètres résultat - static int SP (int x, out int y) { return x + 5 ; } - programme - SP (x) - appelant - appel - X - recopie - retour - sous programme SP - indéfinie - manipulation locale de la copie x - Appel: SP (a, out b); ## Nombre de paramètres variables - public int SP (charx, params int[] y) { return ... ; } - int[] liste; - liste = new int[ 3 ] {9,-5,8}; - Appel: SP ('a', liste); - Liste de paramètres de type int - Par valeur ## new comme modificateur d'accès - class clA { public int x = 10 ; } - class CIB: clA { public new int x = 10 ; } - Masquer un membre hérité ## Méthodes statiques et virtuelles - class CIA { - public virtual int meth1() { ... } - public int meth2() { ... } - public static int meth3() { ... } - Liaison dynamique - Liaison statique - Liaison statique - Statique par défaut ## Redéfinition de méthodes virtuelles - class CIA { public virtual int meth1() { ... } } - class CIB: CIA { public override int meth1() { ... } } - _Méthode virtuelle_ - _Surcharge dynamique_ ## Redéfinition de méthodes statiques - class CIA { - public void meth1 (int x) { ... } - public void meth2 (int x) { ... } } - class CIB: CIA { - public void meth1 (char a) { ... } - new public void meth2 (int x) { ...} } - _Conseillé_ ! ## Les propriétés: lecture/écriture - class clA { - private int Fprop1; - public int prop1 { - get { return Fprop1; } - set { Fprop1 = value; } } } - Accesseur de lecture - Accesseur d'écriture - utilisation: obj.prop1 = 47; ## Les propriétés: redéfinition - class CIA { public virtualint prop1 { get {...} } } - class CIB: CIA { public override int prop1 { get {...} } } ## Les indexeurs - class Table { - int[] t = new int [ 4 ] { 800,100,400,200 } - public int this [int Index ] { - get { return t [Index ] ; } - set {t [Index] = value; } } } - utilisation: obj [3] vaut 200 ## Les exceptions - try {...} - catch { ... } - try { ... } - catch (DivideByZeroException e) { ... } - catch (Exception e) { ... } - finally { ... } - Tout incident - Une hiérarchie d'exceptions - redéclencher: throw new Exception() ## Les constructeurs - class classeA { - public classeA() < : initialiseur > { ... } } - Facultatif mais utile ! - Hérité classe mére - superclasse: base(...) - public classeA(int x): base(x+2,8) { ... } - Autre constr. même classe - autre constructeur : this(...) - public classeA(char x): this(x,20) { ... } ## Les destructeurs - class classeA { - ~classeA() { .. code de finalisation.. } } - Syntaxe unique du destructeur - un seul destructeur par classe - ni hérité, ni surchargé - appel automatique seulement - aucun paramètre - ne détruit pas l'objet, mais gère du code non administré (code de finalisation) - appelle implicitement la méthode Finalize d'Object ## Le garbage collector - class public sealed class GC { public static void Collect(); } - Force le lancement du GC - Actions du GC - 1. Recherche des objets administrés non référencés. - 2. Finalisation de ces objets (appel méthode Finalize). - 3. Destruction de ces objets et libération de la mémoire ## Le delegate - déclaration - 1. Semblable à un pointeur de méthode (Delphi). - 2. Une déclaration _delegate_ définit une classe qui dérive de la classe System.Delegate. - delegate int Del(int x, char y); - _Déclaration_ - class classeA { - public static int fonc1(int i, char c) {...} - public int fonc2(int j, char k) {...} } - _fonc1_ et _fonc2_ compatibles avec _Del_ ## Le delegate - instanciation / méth.statique - Une instanciation _delegate_ ne contient que des méthodes. - delegate int Del(int x, char y); - _Déclaration_ - class classeA { public static int fonc1(int i, char c) {...} } - class classeB { public static void Main() { Del UnDel = new Del (classeA.fonc1 ); UnDel (10,'t'); } } - L'objet _UnDel_ contient la méthode _classeA.fonc1_ - Appel du délégué = _fonc1(10, 't')_ ## Le delegate - instanciation / méth.instance - delegate int Del(int x, char y); - class classeA { public int fonc2(int j, char k) {...} } - class classeB { public static void Main() { classeA Obj = new classeA (); Del UnDel = new Del (Obj.fonc2); UnDel (10,'t');} } - L'objet _UnDel_ contient la méthode _fonc2_ - Appel du délégué = _fonc2(10, 't')_ ## Le delegate - composition - delegate int Del(int x, char y); - class classeA { - public static int fonc1(int i, char c) {...} - public static int fonc2(int j, char k) {...} } - class classeB { public static void Main() { Del UnDel = new Del (classeA.fonc1 Del Un Del += new Del (classeA.fonc2); UnDel (10,'t');} } - L'objet _UnDel_ contient les méthodes _fonc1_ et _fonc2_ sous forme d'une liste - Ajout d'une méthode (composition) - Appel du délégué: _fonc1(10, 't')_, _fonc2(10, 't')_ ## Evénements/1 - IHM - _Click_ - _Bouton_ - champ _Click_ - champ _MouseMove_ - _Message Click_ - _Objet delegate_ du _Click_ - Source émet un message - Receptionne et gère l'événement - Recepteur : Bouton. Click += new EventHandler(this. BoutonClick); - Gestionnaire d'événement : void BoutonClick(object sender, EventArgs e) {....} ## Evénements/2 - IHM - _MouseMove_ - _Bouton_ - champ _Click_ - champ _MouseMove_ - _Message MouseMove_ - _Objet delegate_ du _MouseMove_ - Source émet un message - Receptionne et gère l'événement - Recepteur : Bouton. MouseMove += new EventHandler(this. BoutonMove); - Gestionnaire d'événement : void Bouton Move(object sender, EventArgs e) {....} ## Evénements - IHM - _MouseMove_ - _Click_ - _Bouton_ - champ _Click_ - champ _MouseMove_ - _Message Click_ - _Message MouseMove_ - _Objet delegate_ - _Objet delegate_ - Bouton.Click += new EventHandler(this.BoutonClick); - Bouton. MouseMove += new EventHandler(this.BoutonMove); - ... - private void BoutonClick(object sender, EventArgs e) {....} - private void BoutonMove(object sender, EventArgs e) {....} ## Construire un événement: LIFO - On empile un nouvel élément - _LIFO_ - champ _OnEmpiler_ - _Message OnEmpiler_ - Recepteur - public class ClassLifo: ArrayList { - public delegate void DelegateLifo(string s); - public event DelegateLifo OnEmpiler; - public void Empiler(string x) { this.Insert(0,x); if (OnEmpiler!= null) OnEmpiler(x); } - Appel au futur gestionnaire s'il existe ! ## Gérer un événement : LIFO - On empilel' élément Hello - _LIFO_ - champ _OnEmpiler_ - _Message OnEmpiler_ - _Objet delegate_ - public class UseClassLifo { - static private void EmpilerListener(string ch) { ... } - public static void Main() { pile.OnEmpiler += new Delegate Lifo (EmpilerListener); ClassLifo pile=new ClassLifo(); pile.Empiler('Hello'); } ## Multi-threading - Mémoire centrale - _A_ tâche - _C_ tâche - _SE_ - _D_ - _D1_ - _D2_ - _D3_ - _B_ tâche - System.Threading.Thread - public sealed class Thread ## Démarrage monThread - délégué - public delegate void Thread Start(); - Le code du thread à exécuter - public class clA { public static void exe () { .... } } - public class Thread Test { public static void Main() { ThreadStart ThDeleg = new ThreadStart(clA.exe); Thread mon Thread = new Thread (ThDeleg); monThread.Start(); } } - Le délégué qui exécute le code - Lancement effectif du thread ## Pointeurs utilisables en mode unsafe - unsafe static void Echange1 (int *a, int *b) { int t; t = *a; *a = *b; *b = t; } - Echange à la mode C ou C++ - static void Echange2 (ref int a, ref int b) {int t; t = a; a = b; b = t; } - Echange à la mode C# - static void Echange2 (int a, int b) { int t; t = a; a = b; b = t; } - N'échange rien ! ## Evolutions du Web - techniques - TCP/IP - liaisons - FTP, E-mail - Services rendus - Se connecter au Web - HTML DHTML XML - Visualisation - Pages Web statiques - Pages Web dynamiques - Applications - Web Services - Naviguer sur le Web - Programmer le Web ## ASP.Net et erreurs - Unicité de la gestion des exceptions (CLR) : - Erreur à l'exécution propagée sous la forme d'exception - ASP.NET permet le traitement d'exception: - Redirection automatique des utilisateurs vers la page quand des erreurs non récupérées surviennent. - Défini des messages d'erreurs clairs en lien avec les applications. ## WebForms et ASP.Net, principes - MaPage.aspx.cs - Class MaPage - MaPage.aspx - Welcome! - Name: - Password: - OK - MaPage - Welcome! - HTML - OK - Mapage est obtenue à partir des 2 pages - Code ASP.Net: - <%@ Page language = "c# " Codebehind = "MaPage.aspx.cs" ... %> ## WebForms et ASP.Net avec VS.Net - WebForm1.aspx - F - Francs - Code C# - private void ButtonFrancs Click(object sender, { if (TextBoxSaisie.Text.Length !=0) { TextBoxResult.Text= System.Convert.ToSt } } - Code ASP.Net - <BODY bgColor="navajowhite" ms positioning="GridLayout"> - <h2><b>Bonjour serveur de conversion Euro-Francs</b></h2> - <form id="form1" method="post" runat="server"> - <b>Saisissez la valeur à convertir: </b><br> - <br> - <br> - <asp:Button id="ButtonFrancs" style="Z-INDEX: 102-" ><b>Résultat de conversion: </b></asp:Button> - <asp:TextBox id="TextBoxResult" style="2-INDEX: 10" ></asp:TextBox> - <asp:TextBox id="TextBoxSaisie" runat="server" Vic ></asp:TextBox> - <asp:Button id="ButtonEuros" runat="server" Width= ></asp:Button> - <hr style="2-INDEX: 105; LEFT: 11px; WIDTH: 482px; POS ></hr> - </BODY> ## WebForms et ASP.Net, mécanisme - Client - état des champs modifiés - page HTML renvoyée - Serveur ASP.Net - modifs + page - GAC - Global Assembly Cache - si le source de la page est modifié ASP.net fait appel au CLR qui engendre du code MSIL et une nouvelle image de la page asp stockée dans la cache. - page.aspx - CLR - page.aspx.cs - Compile en JIT - bin\page.dll ## WebService - principes - La pile des services: - Annuaire: publication et recherche de services - UDDI - Inspection: recherche de services sur un serveur - DISCO - Description des services - WSDL - Description des échanges - SOAP - Format des données - XML - Communication - Internet ## WebService - techniques - Web Service Client - Un autre annuaire - UDDI ou annuaire - Localiser un service - UDDI - Lien sur une description du service (XML) - Inspection - DISCO - Requête de demande d'information - Retour: un document d'information (XML) - Description - WSDL - Demander la description du service - Réponse: service description (XML) - Format d'échange - SOAP - Appel du service - Réponse: retour du service demandé (XML) - Web Service ## WebServices - tous répartis - WebService - SOAP - XME - WebService - SOAP - WebService - XME - _Client_ - XME - SOAP ## SOAP - format d'un message - Un document XML utilisant le schéma SOAP: - <?xml version="1.0"?> - <soap:Envelope ...> - <soap:Header ...> - </soap:Header> - <soap:Body> - <Add xmlns="http://tempuri.org/"> - <n1>12</n1> - <n2>10</n2> - </Add> - </soap:Body> - </soap:Envelope> ## SOAP - format de la réponse - Message de réponse du serveur de WebService: - HTTP/1.1 200 OK - .. - Content-Type: text/xml - Content-Length: 391 - <?xml version="1.0"?> - <soap:Envelope ...> - <soap:Body> - <AddResult xmlns="http://tempuri.org/"> - <result>120</result> - </AddResult> - </soap:Body> - </soap:Envelope> ## WebService - acquisition - Client - XMLE - contrat _WDSL_ demandé? - 1 - 2 - XMLE - contrat _WDSL_ envoyé - 3 - classe _proxy_ - CLR - _WDSL.exe_ - XMLE - contrat _WDSL_ - service - Web - Création du code source d'une classe _proxy_ à partir du contrat _WDSL_ ## WebService - consommation - Client - XMLE - XML - requête _SOAP_ - 1 - 2 - XMLE - réponse _SOAP_ - objet par - _JIT_ - CLR - classe _proxy_ - service - Web - Utilisation des méthodes de la classe _proxy_ et retour des réponses par le _WebService_. ## WebService: changer des euros en francs - Client - r1 = _Francs(x)_; - _r2_ - _Francs_, x€ - _SOAP XML_ - classe _Proxy_ - instancier - 3 - WebService - C#, Java, VB - _SOAP XML_ - résultat: r1 frs - contrat _WSDL_ - 4 - 2 - WSDL - C#, VB - Java, - Contrat envoyé - 1 - 45 ## Visual Studio.Net : outil de développement - Visual Studio.NET - VB - C++ - C# - J# ... - _Common Language Specification_ - ASP.NET: Web Services et Web Forms - WindowsForms - _ADO.NET: Données et XML_ - .NET Framework Classes de Base - _Common Language Runtime_ - 45