RECHERCHE

Plan du site

BOURSE

 

RUBRIQUES

 
 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.
 
Xavier Borderie, JDN Développeurs
 
Accueil | Haut de page
 
 



Votre avis sur cette publicité


Quand achetez-vous le plus en ligne ?
Du lundi au vendredi
Le samedi
Le dimanche

Tous les sondages