No Visual Studio, posso clicar com o botão direito do mouse em uma interface e escolher Implementar Interface ou Implementar Interface Explicitamente.
public class Test : ITest
{
public string Id // Generated by Implement Interface
{
get { throw new NotImplementedException(); }
}
string ITest.Id // Generated by Implement Interface Explicitly
{
get { throw new NotImplementedException(); }
}
}
A única diferença que vejo entre os dois é que o nome da interface é adicionado às propriedades e métodos da interface quando eles são criados, se você optar por implementar a interface explicitamente.
Acho que torna o código um pouco mais legível, pois posso ver de onde vem esse método / propriedade. No entanto, isso faz alguma diferença na maneira como a classe é usada ou compilada? E realmente importa se eu implemento minhas interfaces de forma implícita ou explícita?
Há também uma diferença em como você chama o método.
Ao usar uma implementação de interface explícita , você deve usar o tipo de interface para chamar essa implementação específica.
Portanto, ao chamar o código, você precisaria usar uma variável do tipo
ITest
para acessarITest.Id
.O artigo Implementação explícita da interface (Guia de Programação em C #) no MSDN tem um bom exemplo.
fonte
Permite implementar duas interfaces que definem o mesmo método. No entanto, se você implementar explicitamente a interface, os métodos poderão ser acessados somente quando a variável for digitada nessa interface explícita.
Consulte: Tutorial de implementação explícita da interface
fonte
EDIT:
Não deve fazer a diferençaVocê não deve fazê-lo, a menos que sua classe implemente duas interfaces com as mesmas propriedades, pois você precisará converter na interface relevante antes de poder acessar o membro:O exemplo de uso é válido quando você implementa explicitamente um membro da interface, mesmo se você estiver usando apenas uma única interface (que eu sempre esqueço: S); portanto, tentaria evitar a implementação explícita sempre que possível, pois ocultará os membros da classe se eles ' não é transmitido para a interface correta (o que é bastante confuso).
fonte
Com base na resposta de Jalayan,
fonte