动态创建自定义类

时间:2016-04-06 11:48:25

标签: vb.net

我正在开发一个项目,我需要创建大量的自定义类,以便与API正确交互(虽然我知道可能存在关于原因的问题,等等,但简短来说就是这样)

有没有办法动态创建完整的自定义类?而不是

class person
    Private _Height
    Property Height As Integer
    Get
        Return _Height
    End Get
    Set(value As Integer)
        _Height = value
    End Set
End Property
'Continue for all properties of person

我希望能够创建一个新对象,并通过其他输入动态创建它。

dim NewClass as object
dim NewProperty as property
NewProperty.name="Height"
NewProperty.datatype=string
NewClass.AddProperty(NewProperty)

这可能吗?如果是的话,它会为我节省很多时间。

2 个答案:

答案 0 :(得分:0)

我不喜欢后期绑定但有选项(我喜欢我的选项严格)。就像使用DynamicObjectExpandoObject类一样。你的问题很模糊,所以我不知道它是否可行。

Sub Main()

    Dim test As Object = New SampleDynamicClass()

    test.SomeProperty = "123"

    Console.WriteLine(test.SomeProperty)
    Console.ReadLine()

End Sub

Public Class SampleDynamicClass
    Inherits DynamicObject

    Private _values As New Dictionary(Of String, String)

    Public Sub New()

    End Sub

    Public Function GetPropertyValue(ByVal propertyName As String) As String

        Return _values(propertyName)
    End Function

    Public Function SetPropertyValue(ByVal propertyName As String, ByVal value As Object) As Boolean

        If _values.ContainsKey(propertyName) Then
            _values(propertyName) = value.ToString()
        Else
            _values.Add(propertyName, value.ToString())
        End If

        Return True
    End Function

    Public Overrides Function TryGetMember(ByVal binder As GetMemberBinder,
                                           ByRef result As Object) As Boolean
        result = GetPropertyValue(binder.Name)
        Return If(result Is Nothing, False, True)
    End Function

    Public Overrides Function TryInvokeMember(ByVal binder As InvokeMemberBinder,
                                              ByVal args() As Object,
                                              ByRef result As Object) As Boolean
        result = GetPropertyValue(binder.Name)
        Return If(result Is Nothing, False, True)
    End Function

    Public Overrides Function TrySetMember(binder As SetMemberBinder, value As Object) As Boolean
        Return SetPropertyValue(binder.Name, value)
    End Function

答案 1 :(得分:0)

Dim person = New With {Key .Height = 12}
Dim personTypes = New With {Key .Happy = 1, .Sad = 2}
Dim personsAndTypes = New With {Key .Person = person, .Type = personTypes}

问题有点模糊,但如果您不需要其他字段和方法,或重用Anonymous Types