Como: Membros de interface de implementar explicitamente (guia de programação translation from VPE for Csharp)

Este exemplo declara um interface, IDimensionse uma classe, Box, que implementa explicitamente os membros de interface getLength e getWidth. Os membros são acessados por meio da interface de instância dimensions.

Exemplo

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
*/

Programação robusta

  • Observe que as seguintes linhas, no Main método, são comentados como eles iria gerar erros de compilação. Um membro da interface implementada explicitamente não pode ser acessado a partir de um classe instância:

    //System.Console.WriteLine("Length: {0}", box1.getlength());
    //System.Console.WriteLine("Width: {0}", box1.getwidth());
    
  • Observe também que as seguintes linhas no Main método com êxito impressão dimensões da caixa porque estão sendo chamados os métodos de uma instância da interface:

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

Consulte também

Tarefas

Como: Implementar interface explicitamente os membros com herança (guia de programação translation from VPE for Csharp)

Conceitos

Guia de Programação C#

Referência

Classes e estruturas (guia de programação translation from VPE for Csharp)

Interfaces (guia de programação C#)