Programmation .Net - Indépendance financière

Les méthodes des classes en Visual Basic/C#

Les méthodes ressemblent en plusieurs points aux constructeurs, voici toutefois certaines choses importantes à se rappeler concernant ces dernières :

1. Une méthode possède toujours une valeur de retour (sauf si il s’agit d’une Sub en Visual Basic qui sera l’équivalent de void en C#);
2. Elle peut avoir zéro, un ou plusieurs paramètres;
3. Elle peut être overloaded;
4. Elle peut écraser (override) une autre méthode appartenant à son parent;
5. Une méthode devrait porter le nom d’une action, par exemple : Ajouter, CalulerRacine, etc.;
6. Une classe peut contenir autant de méthodes que désiré, toutefois elle ne devrait pas dépasser environ 1000 lignes (à votre discrétion);
7. Une méthode peut avoir une portée (private, public, protected).

La création d’une méthode devrait vous sembler familière car nous en avons créé dans plusieurs tutoriels déjà, je vais tout de même vous donner un petit exemple pour vous rafraîchir la mémoire!

Visual Basic

Option Explicit On
Option Strict On

Public Class Mouse
    Public Property Color As String
    Public Property NumberOfButtons As Integer
    Public Property LightsOn As Boolean

    'Constructeur
    Public Sub New()
        Color = "Black"
        NumberOfButtons = 3
        LightsOn = False
    End Sub

    'Methode pour allumer la lumière
    Public Sub TurnLightsOn()
        LightsOn = True
    End Sub
End Class

C#

namespace PropertiesCSharp
{
    public class Mouse
    {
        public string Color { get; set; }
        public int NumberOfButtons { get; set; }
        public bool LightsOn { get; set; }

        //Constructeur
        public Mouse()
        {
            this.Color = "Black";
            this.NumberOfButtons = 3;
            this.LightsOn = false;
        }
        
        //Méthode pour allumer la lumière
        public void TurnLightsOn()
        {
            LightsOn = true;
        }
    }
}

Cette classe est celle que nous avons utilisée durant le dernier tutoriel. Elle représente une souris d’ordinateur, mais comme vous pouvez certainement le constater, j’y ai ajouté une méthode appelée TurnLightsOn qui servira à “allumer” les LEDs sur la souris disons que c’est une souris de gaming.

Gardez en tête que votre méthode devrait être une action et représenté dans ce cas quelque chose de la vie réelle comme appuyer sur un bouton par exemple. Vous pouvez toutefois penser à des actions impossibles dans la réalité, tant que celles-ci demeurent des actions en tant que telles.

Overload!

Qu’est-ce qu’un overload d’une méthode plus précisément? L’overload est le fait d’écrire deux méthodes avec le même nom dans la même classe mais ayant des paramètres différents (signature différente).

Visual Basic

Option Explicit On
Option Strict On

Public Class Mouse
    'Property short version
    Public Property Color As String
    Public Property NumberOfButtons As Integer
    Public Property LightsOn As Boolean

    'Constructeur
    Public Sub New()
        Color = "Black"
        NumberOfButtons = 3
        LightsOn = False
    End Sub

    'Méthode pour allumer la lumière
    Public Sub TurnLightsOn()
        LightsOn = True
    End Sub

    'Même nom mais avec une signature différente, on utilisera Check pour vérifier si LightsOn est déjà à True
    Public Sub TurnLightsOn(Check As Boolean)
        If Check Then
            If (Not LightsOn) Then
                LightsOn = True
            End If
        Else
            TurnLightsOn()
        End If
    End Sub
End Class

C#

namespace PropertiesCSharp
{
    public class Mouse
    {
        public string Color { get; set; }
        public int NumberOfButtons { get; set; }
        public bool LightsOn { get; set; }

        public Mouse()
        {
            this.Color = "Black";
            this.NumberOfButtons = 3;
            this.LightsOn = false;
        }

        public void TurnLightsOn()
        {
            LightsOn = true;
        }

        public void TurnLightsOn(bool Check)
        {
            //Si l'utilisateur a demandé une vérification de la valeur de LightsOn donc Check à true
            if(Check)
            {
                if (!LightsOn)
                    LightsOn = true;
            }
            else
            {
                //Else, simplement utiliser la signature sans paramètres pour effectuer la tâche standard
                TurnLightsOn();
            }
        }
    }
}

Comme vous pouvez le constater, il s’agit du même nom de méthode mais avec des paramètres et une implémentation différente pour tenter de combler les besoins de notre utilisateur. Une implémentation réelle sera très certainement plus complexe, toutefois je souhaite simplement donner les grandes lignes de ce principe que nous utiliserons certainement dans le futur. Voici le résultat obtenu lors d’un appel de la méthode en question.

Visual Basic

Method overload Visual Basic

C#

Method overload C Sharp

La méthode précédente possède deux overloads, le premier sans paramètres (1) et le second avec le paramètre check (2) comme nous les avons entrés dans la classe elle-même, nous pourrions aussi en ajouter au besoin. Notez que le code des images se trouve dans Program.vb/Program.cs.

Override!

Ajoutons une autre méthode à notre classe, celle-ci se nommera ToString(). Cette méthode est spéciale car elle existe déjà en réalité. Elle provient du parent de toutes les classes, c’est à dire de Object. En bref, nous allons écrire par dessus pour y mettre notre implémentation. Pour ce faire, nous utiliserons le mot-clé override. Voici ce que ça donne :

Visual Basic

    'Override de la méthode ToString
    Public Overrides Function ToString() As String
        Return MyBase.ToString()
    End Function

C#

//Override de la méthode ToString
public override string ToString()
{
   return base.ToString();
}

J’aimerais attirer votre attention sur le mot-clé override utilisé pour, comment mentionné ci-dessus, remplacé la méthode ToString du parent. Dans ce cas, le fait de retourner base(représentant le parent que nous verrons dans un prochain tutoriel).ToString(), revient à ne rien changer à cette méthode. En effet, ToString devrait être une représentation sous la forme d’une chaine de caractères de la classe en question. La plupart du temps, ToString() de base retournera VotreNameSpace.Classe, ce qui est plus ou moins souhaitable. Voici une autre implémentation qui accomplira la tâche désirée.

Visual Basic

    'Override ToString Method
    Public Overrides Function ToString() As String
        Return "Color: " & Color & vbCrLf &
               "NumberOfButtons" & NumberOfButtons & vbCrLf &
               "LightsOn" & LightsOn
    End Function

C#

public override string ToString()
{
     return "Color: " + Color + "\n" +
            "NumberOfButtons" + NumberOfButtons + "\n" +
            "LightsOn" + LightsOn;
}

Que vous le vouliez ou non, la méthode ToString sera là quand bien même que vous ne l'”overridier” pas car elle appartient au parent, dans l’exemple ci-dessus, je retourne une chaine de caractères énonçant les différentes propriétés de la classe, mais c’est vous qui choisissez ce que vous souhaitez retourner dans cette méthode en bout de ligne.

Voici le résultat de mon implémentation de ToString().

Visual Basic

ToString override

C#

ToString C Sharp

La portée (Scope)

La portée dicte qui sera en mesure d’accéder à quel composant de la classe. Nous ne parlons pas que des méthodes ici mais aussi des propriétés, des constructeurs et des membres. La portée est énoncée au début de votre déclaration de composant.

Private

Private énonce une méthode ne pouvant être accédée qu’à l’intérieur de la classe elle-même, on ne peut donc pas y accéder en créant un nouvel objet à l’extérieur. Ceci est la portée la plus restreinte.

Public

Public indique que la méthode pourra être accédée à l’intérieur comme à l’extérieur de la classe, c’est en effet le mode le moins restreint!

Protected

Finalement, Protected est similaire à Private mais rend la méthode disponible aux enfants de la classe en question. À noter que nous verrons plus sur ce sujet lorsque nous explorerons l’héritage.

Code complet

Visual Basic – Mouse class

Option Explicit On
Option Strict On

Public Class Mouse
    'Property short version
    Public Property Color As String
    Public Property NumberOfButtons As Integer
    Public Property LightsOn As Boolean

    'Constructor
    Public Sub New()
        Color = "Black"
        NumberOfButtons = 3
        LightsOn = False
    End Sub

    'Method to turn the lights on
    Public Sub TurnLightsOn()
        LightsOn = True
    End Sub

    'Same method name, but different signature, now it takes one parameter which indicates
    'to the method to check if the lights are off first (just an example).
    Public Sub TurnLightsOn(Check As Boolean)
        If Check Then
            If (Not LightsOn) Then
                LightsOn = True
            End If
        Else
            TurnLightsOn()
        End If
    End Sub

    'Override ToString Method
    Public Overrides Function ToString() As String
        Return "Color: " & Color & vbCrLf &
               "NumberOfButtons" & vbCrLf &
               "LightsOn"
    End Function
End Class

C# – Mouse class

    public class Mouse
    {
        public string Color { get; set; }
        public int NumberOfButtons { get; set; }
        public bool LightsOn { get; set; }

        public Mouse()
        {
            this.Color = "Black";
            this.NumberOfButtons = 3;
            this.LightsOn = false;
        }

        public void TurnLightsOn()
        {
            LightsOn = true;
        }

        public void TurnLightsOn(bool Check)
        {
            //If the user wants to make a check if the lights are on
            if(Check)
            {
                if (!LightsOn)
                    LightsOn = true;
            }
            else
            {
                //Else, simply turn the lights on as usual by calling the other method
                TurnLightsOn();
            }
        }

        public override string ToString()
        {
            return "Color: " + Color + "\n" +
                   "NumberOfButtons" + NumberOfButtons + "\n" +
                   "LightsOn" + LightsOn;
        }
    }

À propos du prochain tutoriel…

Les méthodes prennent une place très importante, vous les aurez besoin pour accomplir des actions et diviser votre code logiquement. Le prochain tutoriel constituera un exercice sur toute la matière des classes pour terminer ce sujet pour le moment!

Information supplémentaire

Voici trois liens qui pourraient vous être utiles si vous souhaitez en apprendre davantage sur le sujet :
1. Overloads
2. Override
3. Scope (anglais seulement)

Ces liens vont beaucoup plus en détails que ce que nous venons de voir, toutefois le présent texte représente, selon moi, l’essentiel.

Visual Basic

C#

Next article Les classes en Visual Basic/C# - Exercice et solution
Previous article Les propriétés des classes en Visual Basic/C#

Related posts

0 Comments

No Comments Yet!

You can be first to comment this post!

Leave a Comment

Your data will be safe! Your e-mail address will not be published. Also other data will not be shared with third person. Required fields marked as *