1 Programmation événementielle Ing4 SI Cyril CAGNET Cyril CAGNET Mail: [email protected] Mail:...

43
1 Programmation Programmation événementielle événementielle Ing4 SI Ing4 SI Cyril CAGNET Cyril CAGNET Mail: Mail: [email protected] Déroulement des séances de cours: Déroulement des séances de cours: 4 cours de 3 Heures. 4 cours de 3 Heures. 4 tp de 3 Heures. 4 tp de 3 Heures. 1 Examen sous forme de QCM + 3-4 questions 1 Examen sous forme de QCM + 3-4 questions ouvertes. ouvertes.

Transcript of 1 Programmation événementielle Ing4 SI Cyril CAGNET Cyril CAGNET Mail: [email protected] Mail:...

11

Programmation événementielleProgrammation événementielleIng4 SIIng4 SI

Cyril CAGNETCyril CAGNET Mail: Mail: [email protected]

Déroulement des séances de cours:Déroulement des séances de cours: 4 cours de 3 Heures.4 cours de 3 Heures. 4 tp de 3 Heures.4 tp de 3 Heures. 1 Examen sous forme de QCM + 3-4 questions ouvertes.1 Examen sous forme de QCM + 3-4 questions ouvertes.

22

L’Initiative .netL’Initiative .net

Historique des version du Historique des version du frameworkframework

1.0 version beta.1.0 version beta. 1.1 premiere version officielle, fourni 1.1 premiere version officielle, fourni

avec visual studio 2003.avec visual studio 2003. 2.0 2.0 3.0 Integration des composants de 3.0 Integration des composants de

Vista WPF, WCF, WF, card, …Vista WPF, WCF, WF, card, … 3.5 Integration de link3.5 Integration de link

33

44

Volonté de créer un Volonté de créer un environnement de environnement de développement:développement:

Cohérent,Cohérent, Portable,Portable, Sécurisé,Sécurisé, Extensible.Extensible.

55

BibliographieBibliographie

66

Le .Net FrameworkLe .Net Framework

Deux principaux composants:Deux principaux composants: Le CLR (Comon Language Runtime).Le CLR (Comon Language Runtime).

Machine virtuelle: Gestion mémoire, compilation du Machine virtuelle: Gestion mémoire, compilation du code, gestion des threads, …code, gestion des threads, …

La FCL (Framework Class Library).La FCL (Framework Class Library). Bibliothèque de classe: Composants graphiques, Accès Bibliothèque de classe: Composants graphiques, Accès

aux fichiers XML, Composants web et asp, …aux fichiers XML, Composants web et asp, …

Une partie du CLR et de la FCL fut portée comme Une partie du CLR et de la FCL fut portée comme standard par l’ECMA (European Computer standard par l’ECMA (European Computer Manufacturers Association) le 13 décenmbre Manufacturers Association) le 13 décenmbre 2001.2001.

77

Fonctionnalités apportées par Fonctionnalités apportées par le couple CLR/FCLle couple CLR/FCL

Modèle de programmation cohérent et simplifié.Modèle de programmation cohérent et simplifié. Garantie d’exécution.Garantie d’exécution. Déploiement simplifié.Déploiement simplifié. Extension aux plates-formes.Extension aux plates-formes. Utilisation de types forts (CTS Common Type Utilisation de types forts (CTS Common Type

System)System) Ré-utilisation du code simplifié.Ré-utilisation du code simplifié. Objets auto descriptifs.Objets auto descriptifs. Vérification de la fiabilité des types.Vérification de la fiabilité des types. Rapports d’échec par exceptions.Rapports d’échec par exceptions. Sécurité d’exécution.Sécurité d’exécution. Interopérabilité.Interopérabilité.

88

Interaction entre CLR/CTS et Interaction entre CLR/CTS et CLSCLS

Le CLS (Common Language Specification) sert à Le CLS (Common Language Specification) sert à assurer la compatibilité entre les différents assurer la compatibilité entre les différents langage .Net. langage .Net.

Il s’agit des spécifications minimum que doivent Il s’agit des spécifications minimum que doivent prendre en charge les compilateurs .Net.prendre en charge les compilateurs .Net.

CLS est un sous ensemble de CLS est un sous ensemble de CLR/CTSCLR/CTS

99

Le langage MSILLe langage MSIL

MSIL OU IL (Microsoft Intermediate MSIL OU IL (Microsoft Intermediate Language).Language).

Langage de bas niveau conçu pour Langage de bas niveau conçu pour être interprété par le CLR.être interprété par le CLR.

Tous les fichiers compilés génèrent Tous les fichiers compilés génèrent du code IL.du code IL.

Le code natif n’est créé qu’à Le code natif n’est créé qu’à l’exécution du code IL.l’exécution du code IL.

1010

Les AssemblysLes Assemblys

Les assemblys sont les blocs de construction des Les assemblys sont les blocs de construction des applications .NET Framework, ils forment l'unité applications .NET Framework, ils forment l'unité fondamentale: fondamentale:

De déploiement,De déploiement, de contrôle de version, de contrôle de version, de ré-utilisation, de ré-utilisation, de portée d'activation et de portée d'activation et d'autorisation de sécurité. d'autorisation de sécurité.

Un assembly est une collection de types et de ressources qui Un assembly est une collection de types et de ressources qui est générée pour fonctionner ensemble et former une unité est générée pour fonctionner ensemble et former une unité logique de fonctionnalités. logique de fonctionnalités.

Un assembly fournit au CLR les informations dont il a besoin Un assembly fournit au CLR les informations dont il a besoin pour connaître les implémentations des types. pour connaître les implémentations des types.

Pour le runtime, un type n'existe pas en dehors du contexte Pour le runtime, un type n'existe pas en dehors du contexte d'un assembly. d'un assembly.

1111

Structures d’Assemblys Mono Structures d’Assemblys Mono et Multi Fichier.et Multi Fichier.

Assembly mono fichier

Assembly Multi Fichier

1212

Etapes de Etapes de compilation/exécutioncompilation/exécution

1313

Les TypesLes Types

Tous les types sont dérivés de Tous les types sont dérivés de System.Object.System.Object.

Chaque objet de chaque type dispose donc Chaque objet de chaque type dispose donc d’un ensemble minimal de méthodes d’un ensemble minimal de méthodes définies dans Object.définies dans Object. EqualsEquals GetHashCodeGetHashCode ToStringToString GetTypeGetType MemberwiseCloneMemberwiseClone FinalizeFinalize

1414

Les types PrimitifsLes types Primitifs

Se sont les types les plus courants Se sont les types les plus courants pour lesquels des alias ont été écrit pour lesquels des alias ont été écrit pour simplifier la lecture et l’écriture pour simplifier la lecture et l’écriture du code.du code. System.Int32 i = new System.Int32();System.Int32 i = new System.Int32(); Int i = 0;Int i = 0;

Attention:Attention: tous les types primitifs de tous les types primitifs de C# ne sont pas forcement C# ne sont pas forcement Compatibles avec le CLS.Compatibles avec le CLS.

1515

Liste des Types Primitifs C#Liste des Types Primitifs C#Type primitifType primitif Type FCLType FCL CompatibleCompatible

SbyteSbyte System.SByteSystem.SByte NonNon

ByteByte System.ByteSystem.Byte OuiOui

ShortShort System.Int16System.Int16 OuiOui

UshortUshort System.Uint16System.Uint16 NonNon

IntInt System.Int32System.Int32 OuiOui

UintUint System.Int32System.Int32 NonNon

LongLong System.Int64System.Int64 OuiOui

UlongUlong System.Uint64System.Uint64 NonNon

CharChar System.CharSystem.Char OuiOui

FloatFloat System.SingleSystem.Single OuiOui

DoubleDouble System.DoubleSystem.Double OuiOui

DecimalDecimal System.DecimalSystem.Decimal OuiOui

ObjectObject System.ObjectSystem.Object OuiOui

StringString System.StringSystem.String OuiOui

BoolBool System.BooleanSystem.Boolean ouioui

1616

Types référencesTypes références

Les types références sont toujours alloués Les types références sont toujours alloués par l’opérateur par l’opérateur newnew qui retourne l’adresse qui retourne l’adresse mémoire de l’objet.mémoire de l’objet. La mémoire doit être allouée dans le heap La mémoire doit être allouée dans le heap

managé.managé. Il est associé, à chaque objet alloué dans le Il est associé, à chaque objet alloué dans le

heap, plus des membres additionnels de marge heap, plus des membres additionnels de marge qui sont initialisés.qui sont initialisés.

L’allocation d’un objet dans le heap peut forcer L’allocation d’un objet dans le heap peut forcer le nettoyage de la mémoire.le nettoyage de la mémoire.

Les objets de type classe sont toujours par Les objets de type classe sont toujours par référence. référence.

1717

Les types par valeursLes types par valeurs

Les types par valeurs sont généralement Les types par valeurs sont généralement alloués dans la pile du thread.alloués dans la pile du thread. La variable de l’instance ne contient pas de La variable de l’instance ne contient pas de

pointeur sur une valeur mais la valeur elle-pointeur sur une valeur mais la valeur elle-même.même.

Les instances de type valeur ne sont pas sous le Les instances de type valeur ne sont pas sous le contrôle du garbage collector.contrôle du garbage collector.

Les objets de type struct et enum sont des objets Les objets de type struct et enum sont des objets de type valeur, et sont dérivés de type valeur, et sont dérivés System.ValueType.System.ValueType.

Le passage d’un type valeur en paramètre oblige Le passage d’un type valeur en paramètre oblige le CLR à faire une copie de la valeur.le CLR à faire une copie de la valeur.

1818

Choisir entre un type référence Choisir entre un type référence ou valeurou valeur

Utiliser les types par valeur ssi toutes les Utiliser les types par valeur ssi toutes les déclarations suivantes sont vérifiées:déclarations suivantes sont vérifiées: Le type agit comme un type primitif.Le type agit comme un type primitif. Le type ne nécessite pas d’héritage d’un autre Le type ne nécessite pas d’héritage d’un autre

type.type. Aucun autre type n’est dérivé de ce type.Aucun autre type n’est dérivé de ce type. Les instances de ce type ne sont pas fréquemment Les instances de ce type ne sont pas fréquemment

fournies en paramètres à une méthode.fournies en paramètres à une méthode. Les instances de ce type ne sont pas fréquemment Les instances de ce type ne sont pas fréquemment

retournées par des méthodes.retournées par des méthodes. Les instances de ce type ne sont pas fréquemment Les instances de ce type ne sont pas fréquemment

utilisées dans des ArrayList, Hashtable,…utilisées dans des ArrayList, Hashtable,…

1919

Compartimentation et Compartimentation et décompartimentationdécompartimentation

La compartimentation permet de transformer un La compartimentation permet de transformer un objet de type valeur en type référence.objet de type valeur en type référence. Allocation dans le heap managé de l’espace nécessaire Allocation dans le heap managé de l’espace nécessaire

pour l’objet valeur + la marge additionnelle.pour l’objet valeur + la marge additionnelle. Copie des champs du type valeur dans la mémoire du Copie des champs du type valeur dans la mémoire du

heap.heap. Renvoie de l’adresse de l’objet.Renvoie de l’adresse de l’objet.

Le compilateur C# ce charge de générer automatiquement Le compilateur C# ce charge de générer automatiquement le code de compartimentation.le code de compartimentation.

La décompartimentation est La décompartimentation est l’inverse l’inverse de la de la compartimentation, mais elle est moins coûteuse compartimentation, mais elle est moins coûteuse car il s’agit uniquement de recopier les champs car il s’agit uniquement de recopier les champs de la référence dans la pile.de la référence dans la pile.

2020

Les membre de typesLes membre de types

La conception de types avec les différents La conception de types avec les différents types de membres qui peuvent être utilisés.types de membres qui peuvent être utilisés. ConstantesConstantes ChampsChamps MéthodesMéthodes

Constructeurs d’instanceConstructeurs d’instance Constructeurs de typesConstructeurs de types

PropriétésPropriétés EvénementsEvénements TypesTypes

2121

ConstantesConstantes

La constante est un symbole qui identifie une La constante est un symbole qui identifie une valeur qui ne change jamais.valeur qui ne change jamais.

Les constantes sont utilisées pour rendre plus Les constantes sont utilisées pour rendre plus lisible le code.lisible le code.

Une constante ne peut prendre qu’un type de Une constante ne peut prendre qu’un type de type primitif.type primitif.

Le compilateur remplace le symbole par sa valeur Le compilateur remplace le symbole par sa valeur au moment de la compilation.au moment de la compilation.

Une constante prend une valeur dès sa Une constante prend une valeur dès sa déclaration.déclaration.

Attention:Attention: L’utilisation des constantes doit se L’utilisation des constantes doit se limiter au sein de l’assembly, sinon cela risque de limiter au sein de l’assembly, sinon cela risque de causer des effets de bords conséquents. causer des effets de bords conséquents.

2222

ChampsChamps

Un champ est une donnée qui contient une Un champ est une donnée qui contient une instance de valeur ou de référence.instance de valeur ou de référence.

Le CLR permet l’utilisation de champs Le CLR permet l’utilisation de champs statiques et non statiques.statiques et non statiques.

L’utilisation des champs statiques résout le L’utilisation des champs statiques résout le problème rencontré avec les constantes.problème rencontré avec les constantes.

Un champ peut être de n’importe quel Un champ peut être de n’importe quel type.type.

Le CLR prend en charge les champs en Le CLR prend en charge les champs en lecture seul.lecture seul.

2323

Les méthodesLes méthodes

Types de méthodes:Types de méthodes: Constructeurs d’instances.Constructeurs d’instances. Constructeurs de types.Constructeurs de types. Méthodes de surcharge d’opérateur.Méthodes de surcharge d’opérateur.

Passage de paramètres:Passage de paramètres: Passage par référence.Passage par référence. Nombre de paramètres variable.Nombre de paramètres variable.

2424

Constructeurs d’instanceConstructeurs d’instance

Méthode qui permet l’initialisation d’une Méthode qui permet l’initialisation d’une instance.instance. Tous les champs non initialisés prennent une Tous les champs non initialisés prennent une

valeur 0 ou null.valeur 0 ou null. Au moins une méthode constructeur doit Au moins une méthode constructeur doit

être définie. Celle-ci peut être privée.être définie. Celle-ci peut être privée. La majorité des compilateurs crée un La majorité des compilateurs crée un

constructeur public sans paramètres pour constructeur public sans paramètres pour les types références (classe) si aucun les types références (classe) si aucun constructeur n’est défini.constructeur n’est défini.

Un type valeur ne peut définir de Un type valeur ne peut définir de constructeur sans arguments. constructeur sans arguments.

2525

Constructeurs de typesConstructeurs de types

Les constructeurs de types sont des Les constructeurs de types sont des constructeurs statiques (aussi nommés constructeurs statiques (aussi nommés constructeurs de classes).constructeurs de classes).

Les constructeurs de types ne prennent Les constructeurs de types ne prennent jamais d’arguments.jamais d’arguments.

Les constructeurs de types sont invoqués Les constructeurs de types sont invoqués dés le premier accès au type.dés le premier accès au type.

Le constructeur de type ne peut être Le constructeur de type ne peut être invoqué qu’une seule fois.invoqué qu’une seule fois.

2626

Passage de paramètresPassage de paramètres

Par défaut le CLR ne prend en Par défaut le CLR ne prend en compte que le passage de compte que le passage de paramètres par valeur.paramètres par valeur.

Dans le cas du passage d’un type par Dans le cas du passage d’un type par référence, le CLR prend en fait la référence, le CLR prend en fait la valeur de l’adresse.valeur de l’adresse.

L’utilisation des mots clés L’utilisation des mots clés refref et et outout indique au CLR que les paramètres indique au CLR que les paramètres sont passés par références.sont passés par références.

2727

Passage d’un nombre variable Passage d’un nombre variable de paramètrede paramètre

Utilisé pour des méthodes pour lesquelles on ne Utilisé pour des méthodes pour lesquelles on ne peut définir un nombre fixe de paramètres à peut définir un nombre fixe de paramètres à passer.passer. Par exemple System.String fournit des méthodes qui Par exemple System.String fournit des méthodes qui

permettent de concaténer un nombre aléatoire de permettent de concaténer un nombre aléatoire de chaînes de caractères.chaînes de caractères.

Pour spécifier au CLR qu’une méthode accepte un Pour spécifier au CLR qu’une méthode accepte un nombre variable de paramètres, il faut utiliser le nombre variable de paramètres, il faut utiliser le mot clé mot clé paramsparams dans la définition de la méthode. dans la définition de la méthode.

ParamsParams est obligatoirement appliqué au dernier est obligatoirement appliqué au dernier paramètre de la méthode.paramètre de la méthode.

2828

PropriétésPropriétés

Les propriétés permettent au code source Les propriétés permettent au code source d’invoquer une méthode avec une syntaxe d’invoquer une méthode avec une syntaxe simplifiée.simplifiée.

Les propriétés permettent de contrôler les Les propriétés permettent de contrôler les accès aux variables.accès aux variables.

Il existe 2 types de propriétés:Il existe 2 types de propriétés: Celles sans paramètres qui sont nommées les Celles sans paramètres qui sont nommées les

propriétés.propriétés. Celles avec paramètres qui sont nommées les Celles avec paramètres qui sont nommées les

indexeurs en C#;indexeurs en C#;

2929

Les IndexeursLes Indexeurs

Une classe peut définir plusieurs Une classe peut définir plusieurs indexeurs s’ils ont des prototypes indexeurs s’ils ont des prototypes différents.différents.

Utiles pour contrôler le type d’un Utiles pour contrôler le type d’un objet lors d’une affectation.objet lors d’une affectation.

Assimilés à des tableaux de propriétés Assimilés à des tableaux de propriétés permettant l’accès aux champs d’une permettant l’accès aux champs d’une classe par index et non par nom.classe par index et non par nom.

3030

Enumérations et drapeauxEnumérations et drapeaux

Rend le code plus facile à maintenir.Rend le code plus facile à maintenir. Rend le code plus lisible.Rend le code plus lisible. Prise en charge par l’intelliSense de Prise en charge par l’intelliSense de

VisualStudio.VisualStudio.

Permettent de spécifier une liste de Permettent de spécifier une liste de nom fixe au type de l’énumération et nom fixe au type de l’énumération et de les affecter à un entier.de les affecter à un entier.

3131

Héritage en c#Héritage en c#

Pas d’héritage multiple en C#.Pas d’héritage multiple en C#. Seule les classes bénéficient de Seule les classes bénéficient de

l’héritage.l’héritage. Toute classe hérite au moins de Toute classe hérite au moins de

Object.Object.

L’héritage est un mécanisme qui permet L’héritage est un mécanisme qui permet d’entendre et d’enrichir des éléments d’entendre et d’enrichir des éléments existants afin de les rendre mieux adaptées existants afin de les rendre mieux adaptées à un problème donné.à un problème donné.

3232

Surcharge de méthodesSurcharge de méthodes

Seule les méthodes ‘virtual’ des classes mère Seule les méthodes ‘virtual’ des classes mère peuvent être Surchargées.peuvent être Surchargées.

La méthode de surcharge doit avoir le même nom et La méthode de surcharge doit avoir le même nom et prototype que la méthode mère.prototype que la méthode mère.

La méthode de surcharge doit être déclarée comme La méthode de surcharge doit être déclarée comme ‘override’.‘override’.

Les éléments statiques ne peuvent pas être Les éléments statiques ne peuvent pas être surchargés.surchargés.

La surcharge de méthode est utilisée pour La surcharge de méthode est utilisée pour modifier le comportement par défaut d’une modifier le comportement par défaut d’une méthode définie dans une classe mère.méthode définie dans une classe mère.

3333

Modificateurs d’accessibilitéModificateurs d’accessibilité

Tous les éléments sont définis avec des modificateurs d’accessibilités.Tous les éléments sont définis avec des modificateurs d’accessibilités. Si aucun modificateur n’est précisé l’élément est défini comme ‘privé’.Si aucun modificateur n’est précisé l’élément est défini comme ‘privé’. Les modificateurs disponibles sont:Les modificateurs disponibles sont:

Virtual,Virtual, // Indique que l’élément surcharge une définition de la classe mère.// Indique que l’élément surcharge une définition de la classe mère. Override,Override, // Indique que l’élément peut être surchargé dans une classe fille.// Indique que l’élément peut être surchargé dans une classe fille. Abstract,Abstract, // Seul le prototype de l’élément est définie il doit être surchargé dans la // Seul le prototype de l’élément est définie il doit être surchargé dans la

classe fille.classe fille. Sealed,Sealed, // Interdit la surcharge de l’élément (par défaut pour les méthodes, mais // Interdit la surcharge de l’élément (par défaut pour les méthodes, mais

peut être utilisé peut être utilisé dans la surcharge d’une méthode virtual). dans la surcharge d’une méthode virtual). Public,Public, // L’élément est accessible de partout.// L’élément est accessible de partout. Private,Private, // L’élément n’est accessible qu’en interne du type dans lequel il est // L’élément n’est accessible qu’en interne du type dans lequel il est

définit (par défaut).définit (par défaut). Internal,Internal, // Accessible uniquement depuis le même assemblage que l’élément.// Accessible uniquement depuis le même assemblage que l’élément. Protected.Protected. // Accessible uniquement au type qui le défini mais aussi aux // Accessible uniquement au type qui le défini mais aussi aux

types dérivés.types dérivés. Certain modificateur ne s’utilise pas avec tout les types.Certain modificateur ne s’utilise pas avec tout les types.

La modification de l’accessibilité permet de définir La modification de l’accessibilité permet de définir le comportement et la porté d’un élément avec son le comportement et la porté d’un élément avec son environnement (dans la classe ou dans les classes environnement (dans la classe ou dans les classes dérivées)dérivées)

3434

InterfacesInterfaces

Contrairement aux classes abstraites les Contrairement aux classes abstraites les interfaces ne peuvent définir le corps d’un interfaces ne peuvent définir le corps d’un élément.élément.

Une interface n’a pas de constructeur.Une interface n’a pas de constructeur. Les membres d’une interface sont toujours public.Les membres d’une interface sont toujours public. Ne contient que des signatures (prototypes) de Ne contient que des signatures (prototypes) de

ses membres.ses membres. Par convention les noms des interfaces Par convention les noms des interfaces

commences par un ‘I’ ex:IEnumerable.commences par un ‘I’ ex:IEnumerable. Une classe peut hériter de plusieurs interfaces.Une classe peut hériter de plusieurs interfaces.

Les interfaces sont utilisées pour palier le fait que C# ne gère Les interfaces sont utilisées pour palier le fait que C# ne gère pas l’héritage multiple. Une interface décrit un ‘contrat’ que pas l’héritage multiple. Une interface décrit un ‘contrat’ que doivent remplir les classes qui héritent de l’interface. Le doivent remplir les classes qui héritent de l’interface. Le contrat défini un ensemble de prototype que doit contrat défini un ensemble de prototype que doit obligatoirement implémenter la classe qui utilise l’interface.obligatoirement implémenter la classe qui utilise l’interface.

3535

destructeursdestructeurs

La classe doit implementer la methode La classe doit implementer la methode Dispose().Dispose().

La methode Dispose doit etre appelee La methode Dispose doit etre appelee explicitement par le code client.explicitement par le code client.

IL faut implementer un destructuteur pour IL faut implementer un destructuteur pour le code non manage.le code non manage.

IL est possible de forcer le GC avec la IL est possible de forcer le GC avec la methode GC.Collect().methode GC.Collect().

L’operation de destruction des objets est normalement a la charge du ramasse miettes. Mais elle peut etre forcee par developpeur pour liberer une importante zone memoire inutilisee.

3636

ExceptionsExceptions

Toutes les Exceptions sont dToutes les Exceptions sont déérivrivéées de la classe es de la classe System.Exception.System.Exception.

Par convention les classes derivees de Par convention les classes derivees de System.Exception ce nommes MaClasseException.System.Exception ce nommes MaClasseException.

Il existe deux domaines d’utilisation des exceptions Il existe deux domaines d’utilisation des exceptions La levee d’une exceptionLa levee d’une exception Et la capture d’une exceptionEt la capture d’une exception

Permet de remettre de systeme dans un etat Permet de remettre de systeme dans un etat stable.stable.

Une exception levee ne peut pas etre ignoree sans Une exception levee ne peut pas etre ignoree sans mettre fin a l’application.mettre fin a l’application.

Les exceptions sont un mécanisme utilisLes exceptions sont un mécanisme utiliséé pour garantir au pour garantir au ddééveloppeur, que tous comportements anormaux du code veloppeur, que tous comportements anormaux du code sera signalsera signaléé..

3737

La levee d’une exceptionLa levee d’une exception

Lever une exception signifie que votre Lever une exception signifie que votre programme a effectue une operation non programme a effectue une operation non autorisee.autorisee.

Le programmeur peut declancher la levee Le programmeur peut declancher la levee d’une exception (throw).d’une exception (throw).

Il est possible de definir un type Il est possible de definir un type personnalise d’exception en creant une personnalise d’exception en creant une nouvelle classe derivee de nouvelle classe derivee de System.ExceptionSystem.Exception

3838

la capture d’une exceptionla capture d’une exception

Pour traiter une exception il faut la Pour traiter une exception il faut la capturer.capturer.

La capture d’une exception s’effectue La capture d’une exception s’effectue dans un bloque try.dans un bloque try.

Et le traitement dans un bloque catchEt le traitement dans un bloque catch Il peut y avoir plusieurs bloques catch Il peut y avoir plusieurs bloques catch

successif.successif.

3939

DéléguésDélégués

Un délégué peut pointer sur une ou Un délégué peut pointer sur une ou plusieurs fonctions.plusieurs fonctions.

Une fonction peut être ajoutée et Une fonction peut être ajoutée et supprimée à un délégué.supprimée à un délégué.

Les délégués sont utilisés par certaines Les délégués sont utilisés par certaines méthodes de classes pour définir le méthodes de classes pour définir le comportement utiliser. (méthodes de tries)comportement utiliser. (méthodes de tries)

Les délégués sont utilisés pour attacher un Les délégués sont utilisés pour attacher un comportement à un événement.comportement à un événement.

Les délégués peuvent être vus comme des pointeurs de fonctions. Ils permettent ainsi de définir dynamiquement le comportement de l’application. Pour déclarer un délégué il suffit de spécifier son prototype puis de l’instancier au même titre qu’une classe.

4040

EvénementsEvénements

Les événements sont découpés en deux parties: La partie coté client contient le code répondant à

l’émission de l’événement. La partie coté composant qui se charge de

déclancher l’événement. Il est possible de s’abonner plusieurs fois à

un même événement. Les événements permettent une

indépendance entre le code du composant et le code de l’application.

Les événements sont le moyen habituel par lequel une application est prévenue lorsqu’une action ou un fait intéressant se produit.

4141

Directives processeurDirectives processeur

#define#define//Permet de définir un symbole (s’utilise avec #if)//Permet de définir un symbole (s’utilise avec #if) #undef#undef // effet inverse de #define// effet inverse de #define #if#if // Si le symbole existe le code sera compilé// Si le symbole existe le code sera compilé #elif#elif // sinon il n’apparaîtra pas dans le code // sinon il n’apparaîtra pas dans le code #else#else // exécutable comme s’il n’avait pas été écrit.// exécutable comme s’il n’avait pas été écrit. #endif#endif // Indique la fin d’un bloque #if #elif #else// Indique la fin d’un bloque #if #elif #else #warning#warning // Lorsque le compilateur lit cette ligne il va // Lorsque le compilateur lit cette ligne il va

générer un warning dans la console de sortie.générer un warning dans la console de sortie. #error#error // Comme le warning mais génère une erreur de // Comme le warning mais génère une erreur de

compilation.compilation. #region#region // Permet dans VisualStudio de définir une zone de // Permet dans VisualStudio de définir une zone de #endregion#endregion //code pouvant être réduite, simplifiant du même //code pouvant être réduite, simplifiant du même

coups la lisibilité du code source.coups la lisibilité du code source. #line#line // Permet de modifier les informations retournée // Permet de modifier les informations retournée

par le compilateur en cas de warning et d erreur.par le compilateur en cas de warning et d erreur.

Les directives du pré processeur n’interviennent pas dans le comportement du code exécutable, mais affectent le processus de compilation. Cette technique est utilisée pour générer a partir d’un même code source différente version du programme.

4242

Le multi ThreadingLe multi Threading

Permet l’exécution ‘simultanée’ de plusieurs Permet l’exécution ‘simultanée’ de plusieurs séquences de code.séquences de code.

Windows gère le multitâche dit préemptif.Windows gère le multitâche dit préemptif. Le framework offre des possibilités de contrôles Le framework offre des possibilités de contrôles

des threads:des threads: Création/ démarrage/ arrêt/ suspension.Création/ démarrage/ arrêt/ suspension. Gestion des priorités (5 niveaux définis dans Gestion des priorités (5 niveaux définis dans

l’enumération ThreadPriority).l’enumération ThreadPriority). Processus de synchronisation (utilisation du mot clé Processus de synchronisation (utilisation du mot clé

‘lock’).‘lock’).

Un thread est une séquence d’exécution dans un programme. Un Un thread est une séquence d’exécution dans un programme. Un même programme peut utiliser plusieurs threads mais un seul même programme peut utiliser plusieurs threads mais un seul thread est créé au lancement du programme par la méthode main. Il thread est créé au lancement du programme par la méthode main. Il est à la charge de développeur de gérer les threads est à la charge de développeur de gérer les threads supplémentaires.supplémentaires.

4343

Accès à la base de registreAccès à la base de registre

Les classes utilisant la base de registre Les classes utilisant la base de registre sont situées dans le namespace sont situées dans le namespace ‘Microsoft.Win32’.‘Microsoft.Win32’.

Le framework donne accès au registre au Le framework donne accès au registre au même titre que ‘regedit’ et ‘regedt32’.même titre que ‘regedit’ et ‘regedt32’.

L’utilisation de .net a tendance à réduire L’utilisation de .net a tendance à réduire l’accès au registre (déploiement Xcopy).l’accès au registre (déploiement Xcopy).

Il existe 7 ruches de registres (accessible Il existe 7 ruches de registres (accessible par la classe ‘Registry’).par la classe ‘Registry’).

La base de registre est le point centrale de toutes les informations liées à la configuration de Windows, aux préférences utilisateurs et configuration logiciel.