En effet, il est «simple» si l'on s'en tient à la base, de programmer en orienté objet sous .NET. Mais dans les faits, si on a la ferme intention de devenir meilleur dans ce type de programmation il faudra voir un peu plus loin que la base. Il existe plusieurs méthodes et façons de faire afin d'amener notre code à un autre niveau. C'est une de ces techniques que nous allons voir aujourd'hui.
Sous .NET, vous avez peut-être déjà remarqué la propriété «Shared»! Mais vous ne savez peut-être pas à quoi elle sert! Alors après la lecture de cet article, vous serez en mesure d'être plus efficace et de générer un code plus performant et moins gourmand en mémoire.
La différence en une classe et une instantiation de classe
Une façon simple de comprendre la différence en la classe et l'instantiation de la classe est de considérer la distinction entre le type Integer et une variable de type Integer.- Vous ne pouvez assigner une valeur à un type :
- Par contre, vous pouvez assigner une valeur à un objet de ce type :
Si on reprend le même principe du côté orienté objet, il est impossible d'utiliser le membre d'une classe sans instanciation :
Maclasse.maPropriété = 5 ' ErreurAfin d'être en mesure d'effectuer cette opération, il faut créer une instance de notre objet :
Dim monObjet as New ObjetmonObjet.maPropriété = 5 ' Ok
La propriété Shared
Mais où voulons nous en venir ? Les principes énumérés ci-haut sont en effet très simple et doivent être normalement connu de tous programmeurs. Où est le problème alors ? Afin d'illustrer le problème, voyons l'exemple suivant : J'ai un objet Employé ayant plusieurs méthodes. Cette objet contient une méthode nommé GetEmployeByID(X as Integer) qui retourne les informations de l'employé ayant l'identifiant X. Jusque là rien de bien complexe. La pluspart des programmeurs novices feront comme ceci. Ils généreront 2 objets! Un premier vide qui permetteras d'instancier le nouveau comme ceci :Dim monObjet1 as New Employe
Dim monObjet2 as New Employe
monObjet1 = monObjet2.GetEmployeById(X)
Dim monObjet1 as New Employe
monObjet1.GetEmployeById(X)
Classe
Public Class Employe''' <summary>
''' Méthode retournant un Employe selon sont Identifiant
''' </summary>
''' <param name="ID">Identifiant de l'employé recherché</param>
''' <returns>Objet Employe</returns>
''' <remarks>Version 1.00</remarks>
Public Shared Function GetEmployeById(ByVal ID As Integer) As Employe
...
End Function
End Class
Code
...' Utilisation : Namespace.Objet.Méthode
Dim MonEmploye As Employes.Employe = Employes.Employe.GetEmployeById(2)