La création de
composants en C#
Document
Auteur David Catuhe
1, avenue de l’Europe Email [Link]@[Link]
Web [Link]
Version 1.0
Campus 1 – Bâtiment F Nombre de pages 5
Date 13/02/2001
31400 Toulouse
Tél. 05 61 75 13 13
Fax 05 61 75 47 97
Web [Link]
2/5
Création d’un composant en C#
1, avenue de l’Europe, Campus 1 – Bâtiment F 31400 Toulouse Tél. 05 61 75 13 13 Fax 05 61 75 47 97
3/5
Création d’un composant en C#
C# est le premier langage orienté composant. Nous allons donc voir, au cours de cet
article, comment C# nous fournit les outils nécessaires à la création d'un composant.
Pour sortir des exemples habituels de composant faisant des calculs mathématiques,
nous allons mettre en oeuvre un composant qui pourra stopper les processus du
système.
Pour cela, nous allons tout d'abord construire le composant. Tout composant C# est
représenté par une classe (comme en VB) qui aura donc des propriétés, des méthodes et
des événements.
Notre composant aura une propriété ProcessName, un événement ErrorMsg qui sera levé
en cas d'erreur, et une méthode Stop afin de stopper le processus en question.
Grâce à la simplicité de C#, le code pour créer notre composant est extrêmement allégé.
De plus, il n'y a besoin d'aucun autre fichier que celui que nous produirons, (pas d'IDL ni
de quoi que ce soit d'autre) : C# prend tout en charge pour nous.
Voici le code de création du composant :
namespace MonPremierComposant // Le namespace définit le nom de la lib
{
using System;
using [Link];
// Définition de la signature d'une fonction réagissant à l'événement
public delegate void ErrorHandler(string sMsg);
// Classe de notre composant
public class MyProcessManager
{
// Donnée privée représentant le processus
private string m_strProcessName;
// Mise en place de l'événement
public event ErrorHandler ErrorMsg;
// Propiété ProcessName en lecture/écriture
public string ProcessName
{
get
{
return m_strProcessName;
}
set
{
m_strProcessName = value;
}
}
// Constructeur
public MyProcessManager()
{
m_strProcessName = "explorer";
}
// Accès à l'adresse
1, avenue de l’Europe, Campus 1 – Bâtiment F 31400 Toulouse Tél. 05 61 75 13 13 Fax 05 61 75 47 97
4/5
Création d’un composant en C#
public bool Stop()
{
bool bRet;
try
{
Process[] proc;
proc = [Link](m_strProcessName);
foreach (Process activeProc in proc)
{
[Link]();
}
bRet = true;
}
catch ([Link] e)
{
ErrorMsg([Link]());
bRet = false;
}
return bRet;
}
}
}
Nous voyons ici apparaître plusieurs concepts importants de C# et notamment le
delegate. Ce dernier peut être vu comme un pointeur de méthode et sert, dans notre cas,
à définir la signature d'une méthode voulant réagir à notre événement.
La mise en place des méthodes en C# ressemble beaucoup à celle du C++. Par contre,
alors que le C++ ne supportait pas les propriétés, le C# fournit un moyen très simple de
les mettre en oeuvre: le get/set.
La partie cliente est, elle aussi, très simple:
namespace ClientComposant
{
using System;
public class ClientComposant
{
public static int Main(string[] args)
{
[Link] processKiller;
processKiller = new [Link] ();
[Link] += new
[Link](GestionErreur);
[Link] = "Psp";
if ([Link]())
{
[Link]("Process {0} is dead...", [Link]);
}
return 0;
}
1, avenue de l’Europe, Campus 1 – Bâtiment F 31400 Toulouse Tél. 05 61 75 13 13 Fax 05 61 75 47 97
5/5
Création d’un composant en C#
public static void GestionErreur(string msgErreur)
{
[Link]("Erreur détectée:" + msgErreur);
}
}
}
Pour utiliser notre composant, nous créons tout simplement un objet de classe
« [Link] ». Il ne nous reste plus qu'à appeler ses
méthodes et à renseigner ses propriétés.
La mise en place de la gestion d'événements est toute simple. L'opérateur « += » ajoute
automatiquement des nouveaux abonnés à un événement et l'opérateur « -= » les
enlève.
Ainsi, en une trentaine de lignes, nous avons mis en place un composant souple et
performant ainsi que son client.
Grâce à C#, toute la tuyauterie de mise en oeuvre, de proxy/stub, d'enregistrements de
COM, a disparu pour laisser la place à un langage élégant et puissant.
1, avenue de l’Europe, Campus 1 – Bâtiment F 31400 Toulouse Tél. 05 61 75 13 13 Fax 05 61 75 47 97