« Programmation C sharp/Les espaces de noms » : différence entre les versions

Contenu supprimé Contenu ajouté
+ alias et conflit noms
Ligne 89 :
</source>
}}
 
== Alias d'espace de nom ==
Le mot clé <tt>using</tt> peut servir à assigner un autre nom (plus court en général) à un espace de nom.
 
Exemple:
<source lang="csharp">
using coll = System.Collections;
 
public class Exemple
{
coll::Hashtable donnees = new coll::Hashtable();
}
</source>
 
Créer un alias d'espace de nom est également utile quand pour utiliser deux classes portant le même nom, situées dans deux espaces de nom différents.
 
Exemple:
<source lang="csharp">
namespace Gestion.Transport
{
public class Ligne { ... }
}
 
namespace Graphique.Dessin
{
public class Ligne { ... }
}
</source>
 
Dans ce cas, on peut utiliser l'instruction <tt>using</tt> pour l'un des deux espaces de nom et utiliser le nom complet pour l'autre espace de nom :
<source lang="csharp">
using Gestion.Transport;
 
public class Exemple
{
Ligne transport;
Graphique.Dessin.Ligne trace;
}
</source>
 
Il est également possible de définir deux alias d'espace de nom afin d'abréger les références:
<source lang="csharp">
using transport=Gestion.Transport;
using dessin=Graphique.Dessin;
 
public class Exemple
{
transport::Ligne transport;
dessin::Ligne trace;
}
</source>
 
 
== Conflit de nom ==
Il est possible que le code source utilise des noms déjà utilisé comme espace de noms.
 
Dans l'exemple de code suivant, les noms <tt>System</tt> et <tt>Console</tt> font référence à des attributs de la classe <tt>Classe</tt>.
<source lang="csharp">
public class Classe
{
private string System = "system";
private string Console = "console";
 
public void Afficher()
{
// System.Console.WriteLine("Exemple"); // provoque une erreur
}
}
</source>
 
Il est toutefois possible d'utiliser <tt>System.Console</tt> en utilisant le préfixe <tt>global::</tt> qui permet de spécifier que l'on accède à l'espace de nom racine de tous les autres (implicite par défaut) :
<source lang="csharp">
public class Classe
{
private string System = "system";
private string Console = "console";
 
public void Afficher()
{
global::System.Console.WriteLine("Exemple"); // OK
}
}
</source>
 
== Alias d'assemblages ==
Lorsqu'une application utilise des assemblages dont les noms de classes complet (espace de nom inclus) sont identiques (deux versions/implémentations d'une même classe), l'ambiguïté doit être résolue en utilisant des alias d'assemblages.
 
Pour utiliser deux versions d'une même classe définies dans les assemblages <tt>grid.dll</tt> (version 1.0, alias "GridV1") et <tt>grid20.dll</tt> (version 2.0, alias "GridV2"), il faut définir les alias à utiliser dans la ligne de commande de compilation :
 
Sous Windows :
csc /r:GridV1=grid.dll /r:GridV2=grid20.dll
Sous Linux (Mono) :
msc -r:GridV1=grid.dll -r:GridV2=grid20.dll
 
Cela crée les alias externes GridV1 et GridV2. Pour utiliser ces alias à partir d'un programme, il faut les référencer à l'aide du mot clé <tt>extern</tt> :
 
<source lang="csharp">
extern alias GridV1;
extern alias GridV2;
</source>
 
Ces deux instructions créent deux nouvelles racines d'espace de nom en plus de <tt>global</tt> :
<source lang="csharp">
extern alias GridV1;
extern alias GridV2;
 
public class Exemple
{
GridV1::Grid grid_v1; // implémentation V1.0 (grid.dll)
GridV2::Grid grid_v2; // implémentation V2.0 (grid20.dll)
}
</source>
 
[[Catégorie:Programmation C sharp (livre)]]