VB.Net 2005 : le namespace My

Ronald VASSEUR

- Titre : VB.Net 2005 : le namespace My

- Auteur : Ronald VASSEUR

- Parution : 2 septembre 2005

- Licence : Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2005-2013 Ronald VASSEUR. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.

Sommaire

- Introduction

- I. Présentation du namespace My

- I-A. My.Application

- I-B. My.Computer

- I-C. My.Forms

- I-D. My.Settings

- I-E. My.User

- I-F. My.WebServices

- I-G. Objets spécifiques à ASP.Net

- II. Extensibilité du namespace My

- III. Utiliser le namespace My en C#

- IV. Ressources

- IV-A. Code source

- IV-B. Documentation MSDN

- Conclusion

Introduction

Visual Basic, dans sa version 2005, introduit un nouveau namespace nommé My. Ce namespace a pour caractéristique d'être un point d'accès rapide à tout un tas de classes du Framework, notamment à de nombreuses classes couramment utilisées par les développeurs VB.Net. Les deux objectifs de ce namespace sont en fait de réduire le nombre de lignes de code nécessaire, tout en simplifiant l'accès à un certain nombre de fonctionnalités. My est composé de neuf objets principaux qui sont agencés selon de grands thèmes, en voici la liste :

1. My.Application ;

2. My.Computer ;

3. My.Forms ;

4. My.Settings ;

5. My.User ;

6. My.WebServices ;

7. My.Log ;

8. My.Request ;

9. My.Response.

Nous ferons une présentation plus précise de ces catégories plus tard dans cet article. Mais ce qu'il faut d'ores et déjà comprendre, c'est qu'il ne s'agit en aucun cas de nouvelles classes, mais en quelque sorte de raccourcis vers des classes existantes du Framework .Net 2.0. L'avantage sera donc bien évidemment une plus grande productivité, car il sera plus facile d'accéder à des fonctionnalités fréquemment utilisées, de plus de par l'organisation de ce namespace, le cheminement dans la recherche d'un objet précis est plus intuitif, ce qui n'est pas forcément toujours le cas sur la totalité de l'immense Framework ; et enfin certaines fonctionnalités sont utilisables en écrivant moins de lignes de code, si ce dernier point vous semble plus confus, ne vous inquiétez pas nous le verrons plus loin au cours de cet article.

Remarque : tout au long de cet article, je parlerai de namespace My et d'objet My.Application ou My.User par exemple (c'est apparemment la terminologie finalement choisie par Microsoft), mais cette dénomination n'est pas adoptée par tous. Il est fort possible, par exemple, que vous ayez entendu parler d'objet My au lieu de namespace My. Il règne en la matière un petit flou, mais qui n'a aucune espèce d'importance, et gageons que pour la version finale, Microsoft aura mis tout cela en ordre.

I - Présentation du namespace My

Dans cette première partie, nous allons voir les principaux objets du namespace My, en s'arrêtant sur ses fonctionnalités principales et sur son champ d'action. Cela sera fréquemment illustré de petits exemples montrant à quel point le namespace My peut augmenter votre productivité en matière du nombre de lignes de code à réaliser. Passons donc tout de suite en revue les neuf principales catégories retenues dans le namespace My.

I-A - My.Application

Cet objet fournit des méthodes et des propriétés permettant d'obtenir des informations sur l'application courante, son environnement d'exécution, sa culture ou encore son assembly. Comme pour tous les autres objets du namespace My, certaines méthodes et propriétés ne sont pas disponibles selon le mode de l'application (Console, WinForms…), tout cela est détaillé dans la documentation. L'objet My.Application utilise une terminologie claire et intuitive, ainsi aidé de l'IntelliSense, vous n'aurez pas de difficulté à l'utiliser, et ce, même sans la documentation. Avec l'objet MyComputer, l'objet My.Application est sûrement celui que vous utiliserez le plus fréquemment. Cet objet n'est pas utilisable dans les applications ASP.Net.

Voici une impression d'écran des méthodes et propriétés proposées par My.Application :

Méthodes et propriétés de My.Application

Exemples d'utilisation de cet objet

Je ne pense pas qu'il soit utile de commenter à outrance ces deux exemples de code, ils sont extrêmement simples, ils consistent en deux fonctions retournant respectivement, le chemin complet du répertoire où se situe l'exécutable de votre application et le nom de l'assembly de votre application.

Récupération du répertoire courant de l'application :

Public Function getRepertoireAppli() As String

Dim maString As String = String.Empty

' Récupération du chemin de l'application
maString = My.Application.Info.DirectoryPath

Return maString

End Function

Récupération du nom de l'assembly :

Public Function getNomAssembly() As String

Dim maString As String = String.Empty

' Récupération du nom de l'assembly
maString = My.Application.Info.AssemblyName

Return maString

End Function

Passons maintenant à l'objet My.Computer, qui avec l'objet My.Application vous sera très utile.

I-B - My.Computer

L'objet My.Computer est, selon moi, le plus utile dans les « développements de tous les jours », en effet il permet d'accéder à une foule d'informations à propos de la machine sur laquelle s'exécute votre programme et de plus il offre un accès direct aux composants principaux tels la carte réseau, la carte son, le système de fichiers, le registre…
Voyons rapidement deux exemples illustrant l'utilisation de cet objet.

Méthodes et propriétés de My.Computer

Exemples d'utilisation de cet objet

Ci-dessous voilà un morceau de code permettant de récupérer le nom de la machine où s'exécute votre application.

Récupération du nom de la machine :

Public Function getNomMachine() As String

Dim maString As String = String.Empty

' Récupération du nom de la machine
maString = My.Computer.Name

Return maString

End Function

Le code suivant permet de réaliser la copie du contenu d'un répertoire. Pour ceux ayant déjà voulu copier l'ensemble des fichiers d'un répertoire, ils savent que c'est une chose qui n'est forcément très simple à mettre en œuvre et qui tient sur plusieurs lignes de code. Ici, de par l'apport du My, on voit que l'on possède une méthode (CopyDirectory) toute prête. En une ligne de code, il est désormais possible de réaliser cette opération. Cette méthode repose sur les mêmes méthodes que vous utilisez tous les jours pour faire de la copie de fichiers, mais le namespace My apporte une grande simplicité à cette opération.

Copie du contenu d'un répertoire :

Public Function copieRepertoire(ByVal repSource As String, ByVal repDestination As String) As Boolean

Try
' Copie du contenu d'un répertoire
My.Computer.FileSystem.CopyDirectory(repSource, repDestination, True, FileIO.UICancelOption.DoNothing)

Return True

Catch ex As Exception

Return False

End Try

End Function

Enfin, voici le troisième et dernier exemple, qui permet de lire un fichier audio, vous voyez ici que l'on peut difficilement faire plus simple. Le namespace My montre, dans cet exemple, à quel point il peut se montrer pratique.

Lecture d'un fichier Wave :

Public Function jouerSon() As Boolean

Try

' Lecture d'un fichier Wave en arrière-plan de l'application
My.Computer.Audio.Play("c:\maMusique.wav", AudioPlayMode.Background)

Return True

Catch ex As Exception

Return False

End Try

End Function

Allez, on continue notre tour d'horizon du My, maintenant le My.Forms…

I-C - My.Forms

My.Forms offre un accès à l'ensemble des formulaires de votre application. Les fonctionnalités qu'il offre sont très nombreuses, mais nous ne les aborderons pas, car vous y êtes fréquemment confrontés lors de la réalisation des interfaces graphiques de vos applications .Net. Cet objet n'est pas utilisable dans les applications ASP.Net.

Méthodes et propriétés de My.Forms

Exemple

Cet exemple vous montre comment griser le bouton « maximize » de la Form1.

Activation ou désactivation du bouton 'Maximize' de la Form1

Public Function maximizeForm(ByVal valeur As Boolean) As Boolean

Try
' Permet de désactiver le bouton permettant de maximiser la taille de votre Form
' (Le bouton se trouvant dans le coin supérieur droit de la fenêtre.)
My.Forms.Form1.MaximizeBox = valeur

Return True

Catch ex As Exception

Return False

End Try

End Function

I-D - My.Settings

L'objet My.Settings permet d'accéder aux paramètres des fichiers de configuration de l'application et de l'utilisateur. Il vous permettra par exemple de récupérer la valeur d'une chaine de connexion ou d'un mot de passe dans un fichier utilisateur. Cet objet n'est pas utilisable dans les applications ASP.Net.

Voici une copie d'un fichier de configuration contenant une seule clé (maChaine1) :

Contenu du fichier de configuration Settings.settings :

<?xml version="1.0" encoding="utf-8" ?>
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)">

<Profiles>
<Profile Name="(Default)" />
</Profiles>

<Settings>
<Setting Name="maChaine1" Type="System.String" Scope="Application">
<Value Profile="(Default)">ma chaine numéro 1</Value>
</Setting>
</Settings>

</SettingsFile>

Exemples

Les exemples suivants permettent de récupérer et de modifier la valeur de la clé « maChaine1 » dans le fichier de configuration d'une application.

Lecture d'un paramètre dans le fichier de configuration :

Public Function getMySetting() As String

Dim monParam As String = String.Empty
monParam = My.Settings.Item("maChaine1").ToString

Return monParam

End Function

Écriture d'un paramètre dans le fichier de configuration :

Public Function setMySetting(ByVal monParam As String) As String

My.Settings.Item("maChaine1") = monParam

Return monParam

End Function

Maintenant vient le tour de l'objet My.User…

I-E - My.User

Les deux méthodes et les trois propriétés de l'objet My.User vous permettent d'accéder aux informations essentielles relatives à l'utilisateur courant de votre application. Cet objet permet de savoir comment est authentifié l'utilisateur, qui il est, et quel utilisateur est utilisé par votre application pour s'exécuter.

Exemple d'utilisation de l'objet My.User

Cet exemple permet simplement de retourner dans une chaine de caractères le nom de l'utilisateur authentifié.

Récupération du nom de l'utilisateur courant :

Public Function getUtilisateur() As String

Dim monUtilisateur As String = String.Empty
monUtilisateur = My.User.Name

Return monUtilisateur

End Function

Allez, on s'accroche ! Et on passe à My.WebServices…

I-F - My.WebServices

Cet objet vous permet d'accéder aux Web Services référencés dans votre projet. Attention, cette fonctionnalité n'est pas accessible dans les applications ASP.Net. Il est ainsi possible de faire appel à une instance d'un WebService en une seule ligne de code. Une fois de plus, vu l'intuitivité de l'objet My.WebService, nous n’entrerons pas dans les détails. Sachez seulement que pour ajouter un Web Service à votre projet, vous devez utiliser « Ajouter une référence Web » dans l'explorateur de solution de Visual Studio 2005, puis vous laisser guider par l'assistant.

Pour consommer ce Web Service, il ne vous reste plus qu'à utiliser la ligne de code My.WebServices.« nom du web service ». « nom de la méthode souhaitée », l'IntelliSense vous listera les Web Services référencés dans votre projet, ainsi que leurs méthodes respectives.

Passons maintenant aux objets du namespace My qui sont spécifiques à ASP.Net.

I-G - Objets spécifiques à ASP.Net

Les objets que nous allons voir dans cette partie appartiennent également au namespace My, mais ne sont utilisables qu'avec les applications ASP.Net, cela signifie qu'ils ne seront pas dans une application WinForm ou console. Ces trois objets sont My.Log, My.Request et My.Response. Ils regroupent un bon nombre de fonctionnalités que les développeurs Web sont appelés à utiliser fréquemment, voyons cela sans plus tarder, en commençant par l'objet My.Log.

1. My.Log

Cet objet est équivalent aux fonctionnalités en matière d'accès aux fichiers log fournies par My.Application, mais il a la particularité d'être dédié aux applications ASP.Net. Il permet notamment d'inscrire des informations relatives au fonctionnement de votre application et aux exceptions qui y sont levées directement dans le fichier Log. Le gain intéressant apporté ici par le namespace My est que cette opération est effectuée en une seule ligne de code ! Qui dit mieux ?

1. My.Request et My.Response

Tout comme l'objet My.Log, les objets My.Request et My.Response sont spécifiques à ASP.Net. Ce qui est tout à fait logique, car vu leur nature ils seraient absolument inutiles en WinForms… :) Voyons deux exemples qui montrent comment utiliser cet objet.

Exemples d'utilisation de My.request

Le premier exemple nous montre simplement comment récupérer le chemin physique complet de notre application.

Récupération du chemin physique de l'application sur le serveur :

Public Function getCheminPhysique() As String

Try

Dim cheminPhysique As String = String.Empty
' Récupération du chemin physique de l'application sur le serveur
cheminPhysique = My.Request.PhysicalApplicationPath

Return cheminPhysique

Catch ex As Exception

Return "Une erreur est survenue."

End Try

End Function

Dans une optique de statistique ou de contrôle de fonctionnement, il peut être intéressant d'accéder aux différentes variables du serveur, nous allons voir ici comment récupérer très simplement l'ensemble de ces variables à l'aide de My.Request.

Récupération de la liste des variables serveur :

Public Function getVariablesServeur() As String

' Remarque : vous devez faire un Imports System.Text pour pouvoir
' utiliser l'objet String.Builder

Dim maListe As Array
Dim mesVariablesServeur As New StringBuilder
Dim uneVariableServeur As String = String.Empty
Dim maChaineVariables As String = String.Empty

Try

' Récupère dans un tableau la liste des variables serveur
maListe = My.Request.ServerVariables.AllKeys

' Parcourt le tableau de variables et les place dans un StringBuilder
For Each uneVariableServeur In maListe

mesVariablesServeur.Append(uneVariableServeur & "</BR>")

Next

' Place le StringBuilder dans une chaine de caractères
maChaineVariables = mesVariablesServeur.ToString

Return maChaineVariables

Catch ex As Exception

Return ex.Message

End Try

End Function

Exemples d'utilisation de My.Response :

Récupération de l'encodage du header :

Public Function getEncodageHeader() As String

Dim monHeader As String = String.Empty

Try

' Récupération de l'encodage du header de la page
monHeader = My.Response.HeaderEncoding.HeaderName
Return monHeader

Catch ex As Exception

Return ex.Message

End Try

End Function

Récupération de la durée d'expiration de la page dans le cache :

Public Function getDureeCache() As String

Dim dureeCache As String = String.Empty

Try

' Récupération de la durée d'expiration de la page dans
' le cache du navigateur Web
dureeCache = My.Response.Expires.ToString
Return dureeCache

Catch ex As Exception

Return ex.Message

End Try

End Function

Voilà, nous avons fait le tour de l'ensemble des objets que nous propose le namespace My. Je ne suis pas trop rentré dans le détail pour éviter d'alourdir l'article, en effet, ce namespace seul pourrait faire l'objet d'un livre complet si l'on souhaitait être exhaustif. Si vous souhaitez connaître en détail les méthodes et propriétés de ces neuf objets, je vous renvoie à la lecture de la documentation, vous trouverez tous les liens nécessaires dans la partie « Documentation MSDN » de cet article.

Après avoir vu comment utiliser ce que nous propose nativement le namespace My, voyons comment nous pouvons y ajouter nos propres objets, méthodes et propriétés.

II - Extensibilité du namespace My

Le namespace My contient un nombre très important « de raccourcis » vers les fonctionnalités du Framework .Net fréquemment utilisées, mais dans le cadre de vos développements vous pouvez être (vous l'êtes d'ailleurs sûrement) appelé à utiliser fréquemment les mêmes méthodes et les mêmes morceaux de code. On se rend donc compte qu'il pourrait être intéressant de pouvoir intégrer ces propres méthodes et autres classes directement dans le namespace My. Et comme d'habitude en .Net, tout est possible ! Et nous allons voir que cela n'est vraiment pas complexe à réaliser. Je vais vous présenter un exemple « d'extension » du namespace My en y intégrant une de mes classes. En fait pour réaliser cette opération, il n'y a rien de particulier à faire si ce n'est de rajouter les deux lignes de codes suivantes respectivement en début et en fin de votre classe.

Classe étendant le namespace My à mes propres objets :

Namespace My

Public Class maClasse

' Contructeur par défaut
Public Sub New()

End Sub

' Fonction retournant le nombre d'éléments dans l'ArrayList
Public Shared Function getNbElementsListe() As Integer

Dim maListe As New ArrayList
Dim nbListe As Integer

maListe.Add("un")
maListe.Add("deux")
maListe.Add("trois")
nbListe = maListe.Count

Return nbListe

End Function

End Class

End Namespace

Inutile de préciser que le code de cette classe est minimaliste et d'une utilité bien discutable… mais ce n'est pas l'objectif de cet exemple. Compilons maintenant notre code et voyons si nous avons bien ajouté notre classe et sa méthode au namespace My. Pour cela, par exemple insérez un bouton, et dans son évènement _click, tapez My. Et l'IntelliSense vous affiche alors la liste des objets disponibles pour la namespace My, vous pouvez voir que votre classe nommée « maClasse » apparait et qu'elle contient une méthode getNbElementsListe.

Il est bien évident que ce code simpliste n'est là que pour illustrer mes propos, et de plus le NameSpace a pour vocation première de servir de « raccourci » vers des objets fréquemment utilisés, donc il faut étendre le Namespace My quand c'est réellement nécessaire et dans les mêmes conditions que ce qui est en place dans le Framework 2.0, sous peine de semer la confusion, surtout si vous travaillez en équipe.

Nous avons vu ici qu'étendre le namespace My est une grande simplicité et j'espère que vous aurez vu ce que cela peut vous apporter dans vos développements de tous les jours.

III - Utiliser le namespace My en C#

Le namespace My a été spécifiquement conçu pour Visual Basic 2005 et il s'appuie en partie sur de nombreuses classes qui se trouvent dans l'assembly Microsoft.VisualBasic.dll. En théorie, comme pour toute assembly .Net il est possible d'y faire référence et de l'utiliser dans un projet C# ou autre, mais dans la pratique les choses sont sensiblement différentes. En effet, cette assembly contient des spécificités propres à Visual Basic 2005, donc qui ne fonctionneront qu'avec ce langage. Pour résumer les choses, il est tout à fait possible d'utiliser le namespace My avec C# en ajoutant simplement une référence vers l'assembly Microsoft.VisualBasic.dll à votre projet dans Visual Studio, mais un certain nombre de fonctionnalités de My ne seront pas présentes, car spécifiques à Visual Basic 2005.

Remarque : cette utilisation restreinte du namespace My avec C# tient au fait que les compilateurs de C# et de VB.Net présentent des différences. L'assembly Microsoft.VisualBasic.dll faisant appel à des spécificités du compilateur VB.Net, le compilateur C# ne sera alors pas à même d'y faire face. Cela est dans l'absolu facilement compréhensible par le fait que même si le namespace My repose sur .Net, il n'est implémenté que dans Visual Basic 2005.

IV - Ressources

IV-A - Code source

Voici un fichier Zip contenant les fichiers mesMethodes.vb et maClasse.vb correspondant à l'intégralité du code présent dans cet article.

Code source (serveur FTP)
Code source (serveur HTTP)

IV-B - Documentation MSDN

Voici les liens pointant vers la documentation MSDN relative au namespace My et aux objets s'y rattachant. Cette documentation n'est pour le moment pas définitive et est susceptible d'évoluer d'ici la sortie de la version finale du Framework .Net 2.0.

My.Application
My.Computer
My.Forms
My.Settings
My.User
My.WebServices
My.log
My.Request
My.Response

Conclusion

Comme nous l'avons vu au cours de cet article, le namespace My n'est pas une révolution dans Visual Basic 2005, mais indéniablement de par sa conception, il va permettre d'accroître encore un peu plus la productivité des développeurs VB.Net. Le namespace couvre un champ de fonctionnalités et d'objets suffisamment large pour que chaque développeur y retrouve les objets qu'il utilise de manière récurrente, de plus, on a vu que si besoin il était possible d'étendre le namespace My à ses propres objets, ce qui peut être très utile dans certains cas. Les développeurs C# pourront aussi bénéficier si nécessaire du namespace My, mais l'on a vu que cela n'est pas recommandé et que la compatibilité totale n'est pas assurée pour des raisons tenant aux spécificités intrinsèques de cette nouveauté de Visual Basic 2005.

J'espère vous avoir montré au cours de cet article l'utilité du namespace My qui devient vite un réflexe et apporte un « confort » de programmation, ce qui dans le cadre d'une pratique intensive, n'est pas négligeable.

Un grand merci à Freegreg pour la relecture de cet article.