none
Probleme avec Clone sur de l'héritage RRS feed

  • Question

  • Bonjour à tous.
    je suis actuellement bloqué avec mes fonctions Clone()  dans les objets que j'ai créé.
    Voici la structure de mes differrents objets, qui sont lié par l'héritage:

    Public Class Equipement
    
        Public Nom as String
        Public Position as Integer
    
        Public Overridable Function Clone() As Object
            Dim retour As New Equipement
            retour.Nom = Me.Nom 
            retour.Position = Me.Position 
            Return retour
        End Function
    end class
    
    Public Class Armure
            Inherits Equipement
    
        Public Taille as Integer
        Public Poids as Single
    
            Public Overrides Function Clone() As Object
                Dim retour As New Armure
                retour = CType(MyBase.Clone(), Armure)
                retour.Taille = Me.Taille 
                retour.Poids = Me.Poids 
                Return retour
            End Function
    
    end Class
    
    Public Class Cuir
            Inherits Armure
    
        Public Bonus as Integer
    
            Public Overrides Function Clone() As Object
                Dim retour As New Cuir
                retour = CType(MyBase.Clone(), Cuir)
                retour.Bonus = Me.Bonus 
                Return retour
            End Function
    
    end Class
    Je me retrouve cependant  dans l'impossibilité de faire cast de l'élement que me renvois MyBase.Clone().
    Chose que je peux comprendre. Mais alors  comment faire?????
    mardi 28 juillet 2009 08:27

Réponses

  • Bonjour,

    C'est normal, chacune de vos méthode Clone() crée un type différent et non le type en cour de clonage.
    Pour pallier à ce problème, vous devez faire appelle à la classe qui est tout en base de votre héritage à la méthode MemberwiseClone().
    Ensuite supprimez les (New ....) dans chacun de vos appels à "Clone()".

    Cordialement
    Gilles TOURREAU - MVP C#
    dimanche 9 août 2009 13:14
    Modérateur

Toutes les réponses

  • Bonjour,

    C'est normal, chacune de vos méthode Clone() crée un type différent et non le type en cour de clonage.
    Pour pallier à ce problème, vous devez faire appelle à la classe qui est tout en base de votre héritage à la méthode MemberwiseClone().
    Ensuite supprimez les (New ....) dans chacun de vos appels à "Clone()".

    Cordialement
    Gilles TOURREAU - MVP C#
    dimanche 9 août 2009 13:14
    Modérateur
  • Salut,
    Essaye aussi d'utiliser l'interface IClonable , après si mes souvenirs sont corrects ce que tu veux faire n'est pas un clone mais une copy, je crois qu'un clone ne copie que la structre et non les informations.(après je peux me tromper)

    Cordialement

    lundi 10 août 2009 21:59