Accueil : Introduction au Framework .NET : Architecture d'une application .NET : Espaces de noms
Espaces de noms
Une application .NET est constituée de types. Ces types sont principalement des classes mais on peut également trouver des structures, des énumérations et des délégués. Tous ces éléments sont étudiés plus loin dans le support de cours.
Les espaces de noms (namespaces) permettent d’organiser logiquement et hiérarchiquement les types qui constituent l’application. Les types livrés dans le framework .NET sont répartis sur des espaces de noms crées par Microsoft. Lorsqu’on développe une application .NET, il faut placer les types que l’on crée dans des espaces de noms qui sont propres à l’application. Par exemple, si on développe une application de gestion commerciale, on pourra toutes les classes relatives à la facturation dans un espace de noms Facturation et tout ce qui traitent des informations clients dans un autre Namespace pour organiser les types.
Les principaux namespaces livrés dans le framework .NET sont les suivants :
- System : Contient les types élémentaires du Framework. Par exemple, les types de base (entiers, booleens, …) y sont placés, ainsi que la classe Console qui permet d’écrire dans la console Windows.
- System.IO : Contient tous les types qui permettent d’accéder aux entrées/sorties comme les fichiers.
- System.Data : Contient tous les types qui permettent d’accéder aux données.
- System.Reflection : Contient tous les types qui permettent de travailler dynamiquement avec les types du framework. Exemple : avoir des informations sur la structure de l’application en cours, connaître les méthodes d’une classe, instancier une classe dynamiquement, ...
- System.Xml : Permet de travailler avec des documents XML.
- System.Text : Contient des types qui permettent de traiter des informations textuelles comme par exemple les problématiques d’encodage.
L’exemple suivant montre comment utiliser les namespaces. Il y a toujours deux possibilités pour utiliser un type placé dans un autre namespace que le namespace en cours :
- Utiliser la directive using pour C# et Imports en Visual Basic .NET puis utiliser le type sans spécifier le nom du namespace
- Ne pas utiliser la directive using ou Imports puis spécifier le chemin complet du type en précédant le nom du type par le nom du namespace. Cette solution est obligatoire un nom de type existe dans deux namespaces différents.
L’exemple suivant montre comment utiliser des types répartis sur plusieurs namespaces.
Le code de la classe nommée ClasseA placée dans un namespace nommé DeuxiemeNamespace est le suivant :
C#
namespace
DeuxiemeNamespace
{
public class
ClasseA
{
}
}
VB.NET
Namespace DeuxiemeNamespace
Public Class
ClasseA
End Class
End
Namespace
Le code de la classe nommée ClasseB placée dans un namespace nommé DeuxiemeNamespace est le suivant :
C#
namespace
DeuxiemeNamespace
{
public class
ClasseB
{
}
}
VB.NET
Namespace DeuxiemeNamespace
Public Class
ClasseB
End Class
End
Namespace
Le code de la classe nommée ClasseB placée dans un namespace nommé TroisiemeNamespace est le suivant :
C#
namespace
TroisiemeNamespace
{
public class
ClasseB
{
}
}
VB.NET
Namespace
TroisiemeNamespace
Public Class
ClasseB
End Class
End
Namespace
Le programme principal qui exploite ces classes est le suivant :
C#
using
DeuxiemeNamespace;
using
TroisiemeNamespace;
namespace
PremierNamespace
{
public class
Program
{
static void
Main(string[] args)
{
ClasseA c1 = new ClasseA();
// DeuxiemeNamespace.ClasseA c1 = new
DeuxiemeNamespace.ClasseA();
// Syntaxe precedente non obligatoire car la
directive using a été spécifiée
// et il n'y a pas conflit de noms.
// Dans les deux cas suivants, bien que les
using soient corrects
// le nom des classes est en conflit, il est
donc obligatoire
// de specifier le nom complet de la classe.
DeuxiemeNamespace.ClasseB c2 = new
DeuxiemeNamespace.ClasseB();
TroisiemeNamespace.ClasseB c3 =
new TroisiemeNamespace.ClasseB();
}
}
}
VB.NET
Imports
DeuxiemeNamespace
Imports
TroisiemeNamespace
Namespace
PremierNamespace
Public Class Program
Public Shared
Sub Main(ByVal
args() As String)
Dim c1 As
ClasseA = New ClasseA
' DeuxiemeNamespace.ClasseA c1 = new DeuxiemeNamespace.ClasseA();
' Syntaxe precedente non obligatoire car la
directive imports a ete specifiee
' et il n'y a pas conflit de noms.
' Dans les deux cas suivants, bien que les
imports soient corrects
' le nom des classes est en conflit, il est
donc obligatoire
' de specifier le nom complet de la classe.
Dim c2 As
DeuxiemeNamespace.ClasseB = New
DeuxiemeNamespace.ClasseB
Dim c3