使用字符串而不是类名创建实例

时间:2014-07-29 21:08:13

标签: .net vb.net

我想根据组合框选择来实例化一个类。假设我有以下类和接口:

Public Interface Sports
Sub description()
End Interface

Public Class Football : Implements Sports
Public Sub description() Implements Sports.description
    MsgBox("Football")
End Sub
End Class

Public Class Hockey : Implements Sports
Public Sub description() Implements Sports.description
    MsgBox("Hockey")
End Sub
End Class

我的客户的一个解决方案如下:

    Dim test As Sports

if combobox.selectedtext = "Football" then
test = New Football
else
test = New Hockey
end if

test.description()

对于许多子类,这可能会很长,所以我在考虑根据所选文本实例化所选类的方法。我知道这看起来很愚蠢,但有点像:

Dim text As String = ComboBox1.SelectedText
test = New "test"

是否可以根据指定的字符串实例化一个类?

2 个答案:

答案 0 :(得分:1)

您可以使用Activator.CreateIntance方法创建新实例。

此方法需要传入Type,因此如果您只有字符串,则需要将该方法与Type.GetType结合使用:

  

Activator.CreateInstance(Type.GetType(ComboBox1.SelectedText))

如果您想将退回的Object分配给您的变量,则需要将其转换为Sports

注意: ComboBox需要列出完整的类型名称(名称和命名空间),否则Type.GetType将无效。

答案 1 :(得分:1)

您可以通过搜索类型:

,根据其非限定名称动态实例化类型
// Find the type by unqualified name
var locatedType = Assembly.GetExecutingAssembly()
                          .GetTypes()
                          .FirstOrDefault( type => type.Name == "Football" );

// Create an instance of the type if we found one
Sports sportsInstance = null;
if( locatedType != null ){
    sportsInstance = (Sports)Activator.CreateInstance( locatedType );
}

这将搜索当前程序集中与“Football”名称匹配的类型,并在找到它时对其进行实例化。