【问题标题】:Create an object from another objects type从另一个对象类型创建对象
【发布时间】:2013-10-01 07:38:39
【问题描述】:

在 Visual Basic.net 中,我可以创建一个对象,还是一个 T 的列表,其类型来自另一个对象。

这里有一些代码:

Dim TestObjectType As Author
Dim TestObject As TestObjectType.GetType

我收到一个错误:

TestObjectType.GetType 未定义

编辑

我可以创建一个特定类型的 Type 对象,然后从这个 Type 对象创建对象、列表或将对象强制转换为该类型吗?

【问题讨论】:

  • 我怀疑这会编译

标签: vb.net types createobject


【解决方案1】:

Dim TestObject As TestObjectType.GetType 将在命名空间 TestObjectType 中查找名为 GetType 的类型。


要使用System.Type 创建类的实例,可以使用Activator.CreateInstance

Dim TestObject = Activator.CreateInstance(TestObjectType.GetType())

要创建通用列表,您可以使用Type.MakeGenericType

Dim listType = GetType(List(Of )).MakeGenericType(TestObjectType.GetType())
Dim list = Activator.CreateInstance(listType)

请注意,上面的两个 sn-ps 都返回一个 Object;但是,您可以使用泛型来实现编译时安全:

Dim TestObject = CreateNew(TestObjectType)
Dim AuthorList = CreateNewList(TestObjectType)

...

Function CreateNew(Of T As New)(obj As T) As T 
    Return New T()
End Function

Function CreateNewList(Of T)(obj As T) As List(Of T)
    Return New List(Of T)
End Function

【讨论】:

  • 我可以创建一个特定类型的 Type 对象吗? 你的意思是像 Dim authorType As System.Type = GetType(Author) 这样的东西? 然后创建对象、列表是的,看我的回答。 * 或者将对象从这个 Type 对象转换成这个类型* 这没有意义,因为转换只在编译时有用。你不知道你想转换成的 System.Type 将实际代表哪种类型。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-01
相关资源
最近更新 更多