918 Stimmen

Wie man eine neue Objektinstanz aus einem Typ erstellt

Man kann nicht immer wissen, welche Type eines Objekts zur Kompilierzeit, sondern müssen möglicherweise eine Instanz der Type .

Wie erhält man eine neue Objektinstanz aus einer Type ?

4voto

Darrel Lee Punkte 2117

Ich kann über diese Frage, weil ich suchte, um eine einfache CloneObject-Methode für beliebige Klasse (mit einem Standard-Konstruktor) zu implementieren

Bei einer generischen Methode können Sie verlangen, dass der Typ New() implementiert.

Public Function CloneObject(Of T As New)(ByVal src As T) As T
    Dim result As T = Nothing
    Dim cloneable = TryCast(src, ICloneable)
    If cloneable IsNot Nothing Then
        result = cloneable.Clone()
    Else
        result = New T
        CopySimpleProperties(src, result, Nothing, "clone")
    End If
    Return result
End Function

Bei nicht-generischen Typen nehmen Sie an, dass der Typ einen Standardkonstruktor hat und fangen eine Ausnahme, wenn dies nicht der Fall ist.

Public Function CloneObject(ByVal src As Object) As Object
    Dim result As Object = Nothing
    Dim cloneable As ICloneable
    Try
        cloneable = TryCast(src, ICloneable)
        If cloneable IsNot Nothing Then
            result = cloneable.Clone()
        Else
            result = Activator.CreateInstance(src.GetType())
            CopySimpleProperties(src, result, Nothing, "clone")
        End If
    Catch ex As Exception
        Trace.WriteLine("!!! CloneObject(): " & ex.Message)
    End Try
    Return result
End Function

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X