Este dato sorprende a la mayoria, cualquiera que ha aprendido a usar interfaces sabe que la primera regla es que todos los miembros son publicos y por ende su implementacion tambien lo es,
siempre, no es opcional. Al menos hasta que llegaste a este articulo a
desaprender que eso no es totalmente cierto. Veamos un pequeño ejemplo, con el puro proposito de demostrarlo.
public interface ITest {
void Test();
}
public class Test : ITest {
void ITest.Test() { //<<== implementacion privada
Console.WriteLine("test");
}
public void Test2() {
Console.WriteLine("test2");
}
}
class Program {
static void Main(string[] args) {
ITest t = new Test();
t.Test();
Test t2 = new Test();
//t2.Test(); //<<=== no compila
Si no lo crees puedes intentarlo tu mismo.
Pero de que me sirve o para que puedo usar esto?
La tecnica te permite asegurarte que el metodo solo es visible a aquellos que usen una variable del tipo de la interface (ITest en este caso). Lo unico que hace es forzar a que el uso de ese metodo sea a travez de una instancia de la interface, osea que, para este ejemplo, si quieres acceder al metodo .Test, solo lo puedes hacer a travez de una variable del tipo ITest.
El unico "truco" para lograr esto es que en la declaracion tienes que agregar el tipo de la interface, antes del miembro:
void ITest.Test();
Seguramente no es el truco mas util, pero es algo para tenerlo guardado ahi en el cofre de los trucos y que en algun momento te sera de utilidad, o talvez algo que te pueda hacer ganar una apuesta ;)