Как создать новый экземпляр объекта из Типа - PullRequest
648 голосов
/ 03 августа 2008

Можно не всегда знать Type объекта во время компиляции, но, возможно, потребуется создать экземпляр Type. Как вы получаете новый экземпляр объекта из Type?

Ответы [ 12 ]

3 голосов
/ 24 марта 2015

Я могу ответить на этот вопрос, потому что я искал реализацию простого метода CloneObject для произвольного класса (с конструктором по умолчанию)

С помощью универсального метода вы можете потребовать, чтобы тип реализовал New ().

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

С неуниверсальным предположением, что тип имеет конструктор по умолчанию и catch исключение, если это не так.

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
3 голосов
/ 10 сентября 2012
public AbstractType New
{
    get
    {
        return (AbstractType) Activator.CreateInstance(GetType());
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...