laurent's profileEspace perso Windows Liv...PhotosBlogListsMore Tools Help

Espace perso Windows Live Laurent

laurent valente

No list items have been added yet.
No list items have been added yet.
June 03

Surcharge d'opérateurs

Qu’est ce que la surcharge d’opérateurs?

La surcharge d’opérateur va vous permettre de gérer le comportement d’un objet face à un opérateur (=, +, - etc..).

            Par exemple, le compilateur ne sais pas additionner deux instances de type Employee, c’est donc à vous de surcharger l’opérateur + (fusion des attributs salaires…).

 

Comprendre par l’exemple

            Nous allons apprendre à utiliser la surcharge d’opérateurs grâce à la classe crée ci-dessus.

            Nous allons sur définir l’opérateur + afin que nous puissions incrémenter le salaire d’un employé de cette façon :

 

monEmployee = monEmployee + 5000

 

C# - Comprendre par l’exemple

class Client

{

        private double salary = 0.0;

        public void IncrementerSalaire(int ajout)

        {

            salary += ajout;

        }

 

        public void IncrementerSalaire(double ajout)

        {

            salary += ajout;

        }

 

        public static Client operator +(Client c1, int salaire)

        {

            Client monClient = new Client();

 

            //On peux accèder à l'attribut salary malgré qu'il soit privé

            //C'est un cas bien spécifique

            monClient.salary = c1.salary + salaire;

            return monClient;

        }

}

 

VB.NET - Comprendre par l’exemple

 

Class Client

    Public Sub IncrementerSalaire(ByVal ajout As Double)

        Me.salary = (Me.salary + ajout)

    End Sub

 

    Public Sub IncrementerSalaire(ByVal ajout As Integer)

        Me.salary = (Me.salary + ajout)

    End Sub

 

    Public Shared Operator +(ByVal c1 As Client, ByVal salaire As Integer) As Client

        Dim monClient As New Client

        ’On peux acceder à l'attribut salary malgré qu'il soit privé

        ’C'est un cas bien spécifique

        monClient.salary = c1.salary + salaire

        Return monClient

    End Operator

 

    Private salary As Double = 0

End Class

 

 

Utilisation de notre classe Client :

unclient

Surcharge de méthodes

Qu’est ce que la surcharge de méthodes ?

La surcharge de méthode va vous permettre de créer plusieurs méthodes de classes ayant le même nom mais pas la même valeur de retour et/ou paramètres.

            Cas pratique : vous connaissez certainement la méthode statique Console.WriteLine() ;. Cette méthode attend en paramètres plusieurs types possibles (affichage d’un int, string, double…) :

 

 Writeline

Comprendre par l’exemple

  • Création de notre classe Employee & Implémentation de la méthode IncrementerSalaire

 

C# - Comprendre par l’exemple

class Employee

{

private double salary = 0.0;

public void IncrementerSalaire(int ajout)

{

salary += ajout;

}

}

 

VB.NET - Comprendre par l’exemple

 

Public Class Employee

Public Sub IncrementerSalaire(ByVal ajout As Integer)

    salary += ajout

End Sub

 

Private salary As Double = 0.0

End Class

 

 

  • Surcharge de la méthode IncrementerSalaire

 

C# - Surcharge de la méthode IncrementerSalaire

 

class Employee

{

    private double salary = 0.0;

    public void IncrementerSalaire(int ajout)

    {

        salary += ajout;

    }

 

    public void IncrementerSalaire(double ajout)

    {

        salary += ajout;

    }

}

VB.NET - Surcharge de la méthode IncrementerSalaire

 

Public Class Employee

    Public Sub IncrementerSalaire(ByVal ajout As Integer)

        Me.salary = (Me.salary + ajout)

    End Sub

 

    Public Sub IncrementerSalaire(ByVal ajout As Double)

        Me.salary = (Me.salary + ajout)

    End Sub

 

    Private salary As Integer = 0

End Class

 

 

 

Ce sera le compilateur qui choisira la fonction à appeler suivant le type passé en paramètre.

incrementer

Création d'une collection typée

Création de notre liste générique

Nous allons maintenant voir comment créer en plusieurs étapes notre collection typée. Cela mettra en œuvre l’un des principes du polymorphisme (typage dynamique à l’exécution).

 

·        Etape 1, Analyse d’une classe Pile non typée

Dans cet exemple nous allons créer une classe Pile nous permettant de stocker des éléments à l’aide d’un ArrayList.

 

 

C# - Création d’une classe Pile

class Pile
{
    // Collection non typée
    private ArrayList liste = new ArrayList();
 
    // Ajout d’un élément dans la liste
   public void Depiler()
    {
        if (this.liste.Count == 0)
        {
            throw new Exception("Liste vide");
        }
        this.liste.RemoveAt(this.liste.Count - 1);
    }
 
    // On retire un élément de liste
   public void Empiler(object obj)
    {
        this.liste.Add(obj);
    }
}

Etape 2, Utilisation d’une classe générique pour notre classe Pile

Nous allons maintenant utiliser la classe générique List afin d’obtenir une classe Pile pouvant être typée à la déclaration et à l’instanciation.

Vous pouvez constater que nous utiliserons T pour désigner le type défini lors du typage de notre classe Pile.

 

C# - Création d’une classe Pile avec List

class Pile<T>
{
    // Collection typée
    private List<T> liste;
 
    public Pile()
    {
        this.liste = new List<T>(); // Constructeur typé
    }
 
    public void Depiler()
    {
        if (this.liste.Count == 0)
       {
            throw new Exception("Liste vide");
        }
        this.liste.RemoveAt(this.liste.Count - 1);
    }
 
   public void Empiler(T obj)
    {
        this.liste.Add(obj);
    }
}

 

·        Etape 3, Test de la classe Pile

Maintenant nous pouvons utiliser notre classe Pile de cette façon :

 

 

C# - Utilisation de la classe Pile générique

Pile<string> maPile = new Pile<string>();
maPile.Empiler("toto");
maPile.Depiler();

 

La classe SortedList

La classe SortedList

La classe SortedList est identique à celle non générique hormis le fait qu’elle soit typée.

 

Voici un exemple d’utilisation de la classe SortedList :

 

C# - Utilisation de la classe SortedList

        SortedList<int, string> maListe = new SortedList<int, string>();

        maListe.Add(1, "Stagiaire 1");

        maListe.Add(2, "Stagiaire 2");

        maListe.Add(4, "Formateur 4");

 

        foreach (KeyValuePair<int, string> paire in maListe)

                MessageBox.Show("Key: " + paire.Key.ToString() + " Element: " + paire.Value);

 

            //Résultat:

            //Key: 1 Element: Stagiaire 1

            //Key: 2 Element: Stagiaire 2

            //Key: 4 Element: Formateur 4

 

VB.NET - Utilisation de la classe SortedList

        Dim maListe As New SortedList(Of Integer, String)()

        maListe.Add(1, "Stagiaire 1")

        maListe.Add(2, "Stagiaire 2")

        maListe.Add(4, "Formateur 4")

 

        For Each paire As KeyValuePair(Of Integer, String) In maListe

            MessageBox.Show("Key: " + paire.Key.ToString() + " Element: " + paire.Value)

        Next

 

        'Résultat:

        'Key: 1 Element: Stagiaire 1

        'Key: 2 Element: Stagiaire 2

        'Key: 4 Element: Formateur 4

La classe List

La classe List

La classe List va permettre le stockage d’objet de la même manière qu’une collection ArrayList mais de façon typée.

 

Voici un exemple de la classe List utilisant des variables de type string :

C# - Utilisation de la classe List

            List<string> maListe = new List<string>();

            maListe.Add("toto");

            maListe.Add("toto1");

            maListe.Add("toto2");

           

            //On récupère le second élèment sans convertion explicite

            string tmp = maListe[1];

 

 

VB.NET - Utilisation de la classe List

      Dim maListe As New List(Of String)()

      maListe.Add("toto")

      maListe.Add("toto1")

      maListe.Add("toto2")

 

            ’On récupère le second élèment sans convertion explicite

            Dim tmp As String = maListe(1)

            MessageBox.Show(tmp)

 

 

Vous remarquez dans la figure ci-dessous, qu’il est seulement possible d’ajouter des objets de type string dans notre collection une fois celle-ci typée.

 List

Figure 1 – Collection List

 

 

 

Le tri d’une instance de type List se fait à partir de la méthode Sort().

Cependant il faudra la redéfinir si vous n’utilisez pas des types de base (string, int, DateTime…).

Pour cela il faut utiliser un comparateur qui implémente l’interface IComparer<>.

 

C# - Implémentation de l’interface IComparer

class ComparateurEmployeParNom : IComparer<Employee>

{

    #region IComparer<Employee> Membres

 

    public int Compare(Employee x, Employee y)

    {

        return x.Nom.CompareTo(y.Nom);

    }

 

    #endregion

}

 

 

VB.NET - Implémentation de l’interface IComparer

Public Class ComparateurEmployeParNom

    Implements IComparer(Of Client)

 

    Public Overrides Function Compare(ByVal x As Client, ByVal y As Client) As Integer

        Compare = x.Nom.CompareTo(y.Nom)

    End Function

End Class

 

 
Photo 1 of 5
Merci de votre visite !
Someone on Windows Live