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

Contenu supprimé Contenu ajouté
m Formatage, ajout de code
<source> bientôt obsolète, remplacé par <syntaxhighlight>
 
Ligne 5 :
 
Exemple :
<sourcesyntaxhighlight lang="csharp">
namespace MesClasses
{
Ligne 14 :
{ ... }
}
</syntaxhighlight>
</source>
 
== Utiliser les membres d'un espace de nom ==
Ligne 22 :
using ''namespace'';
Exemple :
<sourcesyntaxhighlight lang="csharp">
using MesClasses;
 
Ligne 30 :
ClasseDeux objet2;
}
</syntaxhighlight>
</source>
Équivaut à :
<sourcesyntaxhighlight lang="csharp">
public class ClasseTest
{
Ligne 38 :
MesClasses.ClasseDeux objet2;
}
</syntaxhighlight>
</source>
L'exemple du chapitre "[[Programmation C sharp/Un premier programme|Un premier programme]]" utilise déjà un espace de nom : la classe <code>Console</code> est définie dans l'espace de noms <code>System</code>.
 
== Imbrication des espaces de noms ==
L'imbrication des espaces de noms est possible :
<sourcesyntaxhighlight lang="csharp">
namespace MesClasses
{
Ligne 51 :
}
}
</syntaxhighlight>
</source>
 
Ou directement :
<sourcesyntaxhighlight lang="csharp">
namespace MesClasses.Calcul
{
... // espace de nom MesClasses.Calcul
}
</syntaxhighlight>
</source>
 
== Espace de noms en plusieurs parties ==
Ligne 66 :
Exemple :
{{FichierDébut|images.cs|info=Classes de gestion des images dans l'espace de noms Exemple.Graphisme}}
<sourcesyntaxhighlight lang="csharp">
using System;
namespace Exemple.Graphisme
Ligne 74 :
...
}
</syntaxhighlight>
</source>
{{FichierFin}}
 
{{FichierDébut|couleur.cs|info=Classes de gestion des couleurs dans l'espace de noms Exemple.Graphisme}}
<sourcesyntaxhighlight lang="csharp">
using System;
namespace Exemple.Graphisme
Ligne 86 :
...
}
</syntaxhighlight>
</source>
{{FichierFin}}
 
Ligne 93 :
 
Exemple :
<sourcesyntaxhighlight lang="csharp">
using coll = System.Collections;
 
Ligne 100 :
coll::Hashtable donnees = new coll::Hashtable();
}
</syntaxhighlight>
</source>
 
Créer un alias d'espace de nom est également utile pour utiliser deux classes portant le même nom, situées dans deux espaces de nom différents.
 
Exemple :
<sourcesyntaxhighlight lang="csharp">
namespace Gestion.Transport
{
Ligne 115 :
public class Ligne { ... }
}
</syntaxhighlight>
</source>
 
Si l'instruction <code>using</code> est utilisée deux fois, le nom <code>Ligne</code> est ambigu, comme l'explique l'erreur produite par le compilateur :
<sourcesyntaxhighlight lang="csharp">
using Gestion.Transport;
using Graphique.Dessin;
Ligne 128 :
// 'Gestion.Transport.Ligne' and 'Graphique.Dessin.Ligne'.
}
</syntaxhighlight>
</source>
 
Dans ce cas, on peut utiliser l'instruction <code>using</code> pour l'un des deux espaces de nom et utiliser le nom complet pour l'autre espace de nom :
<sourcesyntaxhighlight lang="csharp">
using Gestion.Transport;
 
Ligne 139 :
Graphique.Dessin.Ligne trace;
}
</syntaxhighlight>
</source>
 
Il est également possible de définir deux alias d'espace de nom afin d'abréger les références :
<sourcesyntaxhighlight lang="csharp">
using transport=Gestion.Transport;
using dessin=Graphique.Dessin;
Ligne 151 :
dessin::Ligne trace;
}
</syntaxhighlight>
</source>
 
== Conflit de nom ==
Ligne 157 :
 
Dans l'exemple de code suivant, les noms <code>System</code> et <code>Console</code> font référence à des attributs de la classe <code>Classe</code>.
<sourcesyntaxhighlight lang="csharp">
public class Classe
{
Ligne 168 :
}
}
</syntaxhighlight>
</source>
 
Il est toutefois possible d'utiliser <code>System.Console</code> en utilisant le préfixe <code>global::</code> qui permet de spécifier que l'on accède à l'espace de nom racine de tous les autres (implicite par défaut) :
<sourcesyntaxhighlight lang="csharp">
public class Classe
{
Ligne 182 :
}
}
</syntaxhighlight>
</source>
 
== Alias d'assemblages ==
Ligne 192 :
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é <code>extern</code> :
 
<sourcesyntaxhighlight lang="csharp">
extern alias GridV1;
extern alias GridV2;
</syntaxhighlight>
</source>
 
Ces deux instructions créent deux nouvelles racines d'espace de nom en plus de <code>global</code> :
<sourcesyntaxhighlight lang="csharp">
extern alias GridV1;
extern alias GridV2;
Ligne 207 :
GridV2::Grid grid_v2; // implémentation V2.0 (grid20.dll)
}
</syntaxhighlight>
</source>