Tuesday, June 20, 2006

Ambiguedad en Interfaces

Si señores, respecto a la pregunta de un amigo, quise ver como solucionar el problema de ambiguedad en el tema de interfaces.

Me encontré con una técnica, que alivia este problema, y básicamente lo que se hace es un nombramiento completo, usando el nombre de la interfaz (IMiInterface1.Metodo), esto le dice al compilador que método Metodo() está siendo implementado.

using System;
public interface IMiInterface1
{
void Metodo(int x);
}
public interface IMiInterface2
{
void Metodo(int x);
}
public class MiClase: IMiInterface1, IMiInterface2
{
void IMiInterface1.Metodo(int x)
{
Console.WriteLine("Llamando al método...{0}",x);
}
void IMiInterface2.Metodo(int x)
{
Console.WriteLine("Llamando al método...{0}",x);
}
}
class App
{
public static void Main()
{
MiClase obj= new MiClase();

((IMiInterface1)obj).Metodo(1);
((IMiInterface2)obj).Metodo(2);
}
}

Debe tenerse en cuenta que cada llamada a Metodo() en el cliente necesita su respectivo Cast a la interfaz de la cual se va a usar el método.

En conclusión el nombramiento explicito, es una buen técnica, para evitar la ambiguedad entre interfaces implementadas por una clase, las cuales definen un método igual.

No comments: