Comment : implémenter de manière explicite des membres d'interface (Guide de programmation C#)

Mise à jour : novembre 2007

Cet exemple déclare une interface, IDimensions, et une classe, Box, qui implémente de façon explicite les membres d'interface getLength et getWidth. Les membres sont accessibles via l'instance d'interface dimensions.

Exemple

interface IDimensions
{
    float getLength();
    float getWidth();
}

class Box : IDimensions
{
    float lengthInches;
    float widthInches;

    Box(float length, float width)
    {
        lengthInches = length;
        widthInches = width;
    }
    // Explicit interface member implementation: 
    float IDimensions.getLength()
    {
        return lengthInches;
    }
    // Explicit interface member implementation:
    float IDimensions.getWidth()
    {
        return widthInches;
    }

    static void Main()
    {
        // Declare a class instance box1:
        Box box1 = new Box(30.0f, 20.0f);

        // Declare an interface instance dimensions:
        IDimensions dimensions = (IDimensions)box1;

        // The following commented lines would produce compilation 
        // errors because they try to access an explicitly implemented
        // interface member from a class instance:                   
        //System.Console.WriteLine("Length: {0}", box1.getlength());
        //System.Console.WriteLine("Width: {0}", box1.getwidth());

        // Print out the dimensions of the box by calling the methods 
        // from an instance of the interface:
        System.Console.WriteLine("Length: {0}", dimensions.getLength());
        System.Console.WriteLine("Width: {0}", dimensions.getWidth());
    }
}
/* Output:
    Length: 30
    Width: 20
*/

Programmation fiable

  • Notez que les lignes suivantes, dans la méthode Main, sont transformées en commentaires, parce qu'elles produiraient des erreurs de compilation. Un membre d'interface qui est implémenté de façon explicite n'est pas accessible à partir d'une instance de classe :

    //System.Console.WriteLine("Length: {0}", box1.getlength());
    //System.Console.WriteLine("Width: {0}", box1.getwidth());
    
  • Notez également que les lignes suivantes, dans la méthode Main, impriment correctement les dimensions de la zone, car les méthodes sont appelées à partir d'une instance de l'interface :

    System.Console.WriteLine("Length: {0}", dimensions.getLength());
    System.Console.WriteLine("Width: {0}", dimensions.getWidth());
    

Voir aussi

Tâches

Comment : implémenter de manière explicite des membres d'interface par héritage (Guide de programmation C#)

Concepts

Guide de programmation C#

Référence

Classes et structs (Guide de programmation C#)

Interfaces (Guide de programmation C#)