 |
|
|
| |
| TUTORIEL TECHNOS .NET |
 |
|
 |
| Les liaisons tardives dans C# |
| Exploration de l'utilisation de la classe Activator dans le cadre d'une forme précise de réflexion Objet.
(28/04/2005) |
  |
Une liaison, en langage de
programmation, correspond au mécanisme permettant d'associer
une variable à un nom. Caractéristique des langages Objets,
la liaison tardive consiste en une liaison qui ne peut se réaliser
qu'une fois le type de l'objet connu, donc à l'exécution du
programme.
En comparaison, une liaison statique est définie
dans le code source, et donc connue lors de la compilation -tous les langages de programmation en font usage (sans quoi
il serait impossible de définir une variable).
La liaison tardive retarde donc la liaison au moment de la création
de l'objet visé. Avant cette création, la liaison est impossible.
L'intérêt de cette pratique réside dans la possibilité de généraliser
son code, et donc de le rendre plus flexible. Au final, il permet
d'invoquer pour un objet donné la méthode la mieux adaptée à
la situation en cours, d'accéder aux propriétés idoines ou de
manipuler les champs nécessaires.
Cette explication
se rapproche assez de celle qui s'applique au sein du mécanisme
de réflexion (lire notre
article du 23/03/2005), et c'est celui-ci qui fournit
les fonctionnalités nécessaires à la liaison tardive. Là où
la liaison statique utilise le mot-clef new pour associer un
objet à un nom, la liaison tardive se fera à l'aide de la classe
Activator.
C'est en effet sur System.Activator
que repose le plus gros du travail entourant la liaison tardive,
particulièrement sa méthode CreateInstance.
Cette classe prend en charge la création dynamique d'objets
en mémoire, lorsque l'application est en cours d'exécution,
et CreateInstance créé une instance
du type indiqué en paramètre (par l'invocation de se constructeur).
Elle renvoie un handle sur l'objet créé, qu'il reste à transtyper
pour pouvoir manipuler l'objet lui-même. Activator
créé donc une sortie de copie de l'objet original, que l'on
peut manipuler comme une instance à part - et donc manipuler
ses valeurs de manière indépendante de l'instance originale.
public class ActivatorMiAmor {
public static void Main() {
Chien droopy = new Chien("I am happy");
droopy.aboie();
Chien snoopy = (Chien)Activator.CreateInstance(droopy.GetType()));
snoopy.aboie();
}
}
 |
Forum |
|
|
Réagissez
dans les forums
de JDN Développeurs
|
Les liaisons tardives sont plus lourdes à gérer que les liaisons
classiques, mais offrent l'intérêt de rendre l'application facilement
extensible : une nouvelle classe introduite dans le programme
pourra facilement être prise en compte, puisque ses méthodes
sont appelées automatiquement pour peu que l'objet fasse référence
à un objet du type approprié.
Loin de remplacer efficacement les liaisons statiques - il est
préférable de découvrir ses erreurs lors de la compilation plutôt
que l'exécution - les liaisons tardives trouvent leur place
dès qu'il s'agit de travailler en mode d'interopérabilité entre
COM et .NET -comme obtenir la référence IDispatche d'un objet
COM, par exemple. |
|
|
 |
|
 |
|
|
| Quand achetez-vous le plus en ligne ? |
|
|
|
|
|
|

|
| |
|