Wednesday, December 01, 2004

un poco atrasado....

Bueno, ya este año había puesto... no un post, porque Hotmail me cerró la cuenta y no había confirmado la autorizacion que me había mandado geykel para postear, y pues hice un comentario, y... nada, que consumí mi cuota de internet en 3 días y no podía navegar, pero ahí les va un post..

esto lo escribí en el notepad hace unos días, pero lo voy a pegar aquí, va y a alguien le sirve:

1:27 PM 11/24/2004 hora de Cuba.

hace una pila de dias que quería hacer que una clase (C#) implementara una interfaz pero que los métodos definidos en esa interfaz devolvieran otra cosa que no era lo que definía la interfaz, pregunté en un foro de microsoft, pero parece que el tipo no me entendió bien la pregunta, pero un tipo de desarollador 5 estrellas me lo dijo, y era así por ejemplo:


Interface ICloneable{

object Clone();
}

public MyClass : ICloneable{
// implementacion explicita de ICloneable
...

private object MyClone(){
return new MyClass(this);
}

// implementacion por defecto de clone

public MyClass Clone(){
return this.MyClone() as MyClass;
}

// solo visible cuando se utilice la referencia a travez de la interfaz

object ICloneable.Clone(){
return this.MyClone() as MyClass;
}

...

}

esto es exactamente lo que yo quería, pues ahora al hacer


MyClass x = new MyClass();
MyClass y = x.Clone();

//se llama al metodo que devuelve un
//MyClasss y no es necesario un cast;

ICloneable j;
j = x
j.Clone(); //se llama al metodo ICloneable.Clone de MyClass,

que alegría!! como voy a usar eso ahora, y eso es lo que hacen todas las clases en .Net


No comments: