Siempre anule la función con un tipo de devolución diferente

Tengo esta clase MustInherit llamada ViewerElement, de la cual derivan clases como ViewerLine, ViewerImage, etc.

Luego, en el programa principal tengo una colección de diferentes elementos (Imágenes, Líneas, etc.). Lo que quiero hacer es algo como lo siguiente:

Dim NewElement As ViewerElement
For Each Element As ViewerElement In Elements
    If blabla Then
        NewElement = Element.Clone()
        Exit For
    End If
Next
Elements.Add(NewElement)

Me estoy desesperando por implementar este método de clonación sin obtener errores. ¿Cómo se debe hacer esto?

Muchas gracias por adelantado.

preguntado el 08 de noviembre de 11 a las 11:11

1 Respuestas

Deberías hacer ViewerElement implementar IClonable de la interfaz del.
Entonces, en Clone() método, debe crear un nuevo ViewerElement objeto copiando todos los valores de las propiedades (o cambiándolos según sus necesidades).
Clone() El método debe devolver un objeto que se pueda convertir con su tipo; entonces depende de usted decidir qué valores asumen propiedades, wchis status tiene cada una de las variables internas.

Un ejemplo (escrito en C #)

public class ViewerElement : ICloneable
{
    private int a = 0;
    private string b = "";

    public ViewerElement(int a, string b)
    {
        this.a = a;
        this.b = b;
    }

    public object Clone()
    {
        return new ViewerElement(a, b);
    }
}

respondido 08 nov., 11:15

Hola Marco, gracias por la respuesta, el problema que tuve fue que quería que ViewerElement tuviera un método Clone, para poder llamarlo int he for loop. Pero dado que la clase ViewerElement era solo una clase abstracta de la que derivan ViewerLine, ViewerImage, ViewerRect, etc., estaba teniendo algunos problemas. Tu código me dio una idea y pude resolver el problema. Sigo sin entender por qué deberíamos implementar IClonable, ¿no es suficiente declarar el método Clone? ¡Gracias! - curial

@curial: sí, implementando Clone() el método es suficiente. De todos modos si implementa IClonable interfaz usted hace un contrato que puede utilizar en otro lugar. Tal vez sea solo una cuestión de estilo ...;) - Marco

@curial: puedes definir Clone() método como abstract y dejar que las clases derivadas lo implementen ... - Marco

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.