Implement Strongly Typed IClonable

Συζητήσεις για τις γλώσσες του dot Net και για του Visual Studio της Microsoft

Συντονιστές: WebDev Moderators, Super-Moderators

Απάντηση
Άβαταρ μέλους
MitsBits
Δημοσιεύσεις: 36
Εγγραφή: 26 Σεπ 2006 13:50
Επικοινωνία:

Implement Strongly Typed IClonable

Δημοσίευση από MitsBits » 20 Οκτ 2006 15:56

Όταν κάνουμε implement το IClonable σε μια κλάση η μέθοδος Clone επιστρέφει ένα γενικό αντικείμενο. Για να μπορέσουμε να έχουμε ένα typed instance της κλάσης μας από τη μέθοδο Clone θα σας δώσω ένα παράδειγμα με μια απλή κλάση. Προσέχετε ότι ιδιότητες που δεν είναι Serializable (Generics, Interfaces) θα πρέπει να έχουν attribute που θα τις αποκλείει απο το Serialize αλλιώς θα "χτυπήσει". Η κλάση έχει ως εξής:

Κώδικας: Επιλογή όλων

-----------------------------------------------------------------------------------

Option Strict On

<Serializable&#40;&#41;> _
Public Class CloneThisClass
    Implements ICloneable

#Region " Variables "
    Private m_NotSerializableProperty As IList
    Private m_SerializableProperty As String
#End Region

#Region " Properties "

    <Xml.Serialization.XmlIgnore&#40;&#41;, Xml.Serialization.SoapIgnore&#40;&#41;> _
    Public Overridable Property NotSerializableProperty&#40;&#41; As IList
        Get
            Return m_NotSerializableProperty
        End Get
        Set&#40;ByVal value As IList&#41;
            value = m_NotSerializableProperty
        End Set
    End Property

    Public Overridable Property SerializableProperty&#40;&#41; As String
        Get
            Return m_SerializableProperty
        End Get
        Set&#40;ByVal value As String&#41;
            value = m_SerializableProperty
        End Set
    End Property

#End Region

#Region " ICloneable Functions "

    Public Function Clone&#40;&#41; As CloneThisClass
        Return DirectCast&#40;CloneMe&#40;&#41;, CloneThisClass&#41;
    End Function

    Private Function CloneMe&#40;&#41; As Object Implements System.ICloneable.Clone
        Return CloneThis&#40;Me&#41;
    End Function
#End Region

End Class
-----------------------------------------------------------------------------------
Η μέθοδος CloneThis(Me) έχει ως εξής:

Κώδικας: Επιλογή όλων

-----------------------------------------------------------------------------------
    Shared Function CloneThis&#40;ByRef obj As Object&#41; As Object
        Dim Result As Object
        Dim ms As New MemoryStream&#40;&#41;
        Dim bf As New SoapFormatter&#40;Nothing, _
        New StreamingContext&#40;StreamingContextStates.Clone&#41;&#41;
        bf.Serialize&#40;ms, obj&#41;
        ms.Seek&#40;0, SeekOrigin.Begin&#41;
        Result = bf.Deserialize&#40;ms&#41;
        ms.Close&#40;&#41;
        Return Result
    End Function
-----------------------------------------------------------------------------------
Η Function CloneThis βέβαια μπορεί να δουλέψει και με XML και Binary εκτόs απο SOAP.
Α, και μην ξεχάσετε τα απαραίτητα Imports.
Tata..

Άβαταρ μέλους
cordis
Administrator, [F|H]ounder, [C|S]EO
Δημοσιεύσεις: 27626
Εγγραφή: 09 Οκτ 1999 03:00
Τοποθεσία: Greece
Επικοινωνία:

Implement Strongly Typed IClonable

Δημοσίευση από cordis » 20 Οκτ 2006 16:02

ωραίο. ;)
tutorialized! :P
Δεν απαντάω σε προσωπικά μηνύματα με ερωτήσεις που καλύπτονται από τις ενότητες του forum. Για ο,τι άλλο είμαι εδώ για εσάς.
- follow me @twitter

Άβαταρ μέλους
skeftomilos
Script Master
Δημοσιεύσεις: 2888
Εγγραφή: 07 Ιαν 2005 07:22
Τοποθεσία: Αθήνα

Implement Strongly Typed IClonable

Δημοσίευση από skeftomilos » 20 Οκτ 2006 22:01

Κώδικας: Επιλογή όλων

Public Class Topic24926 &#58; Implements ITutorial
:)

Ενδιαφέρουσα τεχνική. Το bonus είναι πιστεύω η γενικότητα, και το malus η performance.
The pure and simple truth is rarely pure and never simple. Ο μη νους δε σκέπτεται μη σκέψεις για το τίποτα.

Απάντηση

Επιστροφή στο “dot Net και Visual Studio”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 1 επισκέπτης