我想根据组合框选择来实例化一个类。假设我有以下类和接口:
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"
是否可以根据指定的字符串实例化一个类?
答案 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”名称匹配的类型,并在找到它时对其进行实例化。