Partilhar via


implementação explícita da interface (guia de programação translation from VPE for Csharp)

If a classe implementa duas interfaces que contém um membro com a mesma assinatura e, em seguida, implementar esse membro em classe fará com que sistema autônomo duas interfaces usar esse membro sistema autônomo sua implementação.Por exemplo:

interface IControl
{
    void Paint();
}
interface ISurface
{
    void Paint();
}
class SampleClass : IControl, ISurface
{
    // Both ISurface.Paint and IControl.Paint call this method.
    public void Paint()
    {
    }
}

Se a dois interface membros não executam a mesma função, no entanto, isso pode levar a uma implementação incorreta de uma ou ambas as interfaces.É possível implementar um membro da interface explicitamente — criar um membro de classe que é chamado somente por meio da interface e é específico para aquela interface.Isso é realizado pela nomeação membro da classe com o nome da interface e um período.Por exemplo:

public class SampleClass : IControl, ISurface
{
    void IControl.Paint()
    {
        System.Console.WriteLine("IControl.Paint");
    }
    void ISurface.Paint()
    {
        System.Console.WriteLine("ISurface.Paint");
    }
}

O membro de classe IControl.Paint só está disponível por meio do IControl interface, e ISurface.Paint só está disponível por meio de ISurface. Ambas as implementações de método são separadas e não está disponível diretamente na classe.Por exemplo:

SampleClass obj = new SampleClass();
//obj.Paint();  // Compiler error.

IControl c = (IControl)obj;
c.Paint();  // Calls IControl.Paint on SampleClass.

ISurface s = (ISurface)obj;
s.Paint(); // Calls ISurface.Paint on SampleClass.

Implementação explícita também é usada para solucionar sistema autônomo casos em que duas interfaces declarar diferentes membros de mesmo nome, sistema autônomo uma propriedade e um método:

interface ILeft
{
    int P { get;}
}
interface IRight
{
    int P();
}

Para implementar ambas as interfaces, uma classe tem usar implementação explícita para a propriedade P ou o método P, ou ambas, para evitar um erro do compilador.Por exemplo:

class Middle : ILeft, IRight
{
    public int P() { return 0; }
    int ILeft.P { get { return 0; } }
}

Consulte também

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#)

Herança (Guia de programação C#)