Vb.net 未找到类型为'';使用Activator.Instance时
我正在写一个项目,在这个项目中,稍后将使用更多的模块进行扩展,因此我希望尽可能多的代码是独立的,因此我使用各种方法尽可能地保持所有内容的通用性,而不需要类型、类等的硬编码列表 作为概念证明,我在一个类中提出了以下代码:Vb.net 未找到类型为'';使用Activator.Instance时,vb.net,class,reflection,.net-assembly,activator,Vb.net,Class,Reflection,.net Assembly,Activator,我正在写一个项目,在这个项目中,稍后将使用更多的模块进行扩展,因此我希望尽可能多的代码是独立的,因此我使用各种方法尽可能地保持所有内容的通用性,而不需要类型、类等的硬编码列表 作为概念证明,我在一个类中提出了以下代码: Public Class clsAddition Public Function DoAction(Value1 As String, Value2 As String) As String Dim dblTmpRet As Double Dim strTmpR
Public Class clsAddition
Public Function DoAction(Value1 As String, Value2 As String) As String
Dim dblTmpRet As Double
Dim strTmpRet As String = ""
If IsNumeric(Value1) = False Then strTmpRet += "Argument 'Value1' is not numeric. "
If IsNumeric(Value2) = False Then strTmpRet += "Argument 'Value2' is not numeric. "
If strTmpRet = "" Then
dblTmpRet = CDbl(Value1) + CDbl(Value2)
strTmpRet = CStr(dblTmpRet)
End If
Return strTmpRet
End Function
Private Function IsNumeric(Input As String) As Boolean
Dim blnTmpRet As Boolean
Try
Dim dblTest As Double = CDbl(Input)
blnTmpRet = True
Catch ex As Exception
blnTmpRet = False
End Try
Return blnTmpRet
End Function
Public Sub New()
MyBase.New()
End Sub
End Class
以及windows窗体中的以下代码
Private objObjectClass As Object
Private Sub cmdCreateObject_Click(sender As Object, e As EventArgs) Handles cmdCreateObject.Click
Dim assem As Assembly = GetType(Form1).Assembly
Dim typChosen As Type
Try
typChosen = assem.GetType(Me.comObjectType.SelectedItem.ToString, True)
Catch ex As Exception
typChosen = Nothing
End Try
If Not IsNothing(typChosen) Then
'found it
objObjectClass = Activator.CreateInstance(typChosen, True)()
Else
'didn't find it
Throw New Exception("Unable to locate type in assembly")
End If
End Sub
问题是,在“Activator.CreateInstance(typselected,True)()”行上,抛出了以下错误
“System.MissingMemberException”类型的未处理异常
在Microsoft.VisualBasic.dll中发生其他信息:否
找到类型“clsAddition”的默认成员
我的目标是能够创建类的实例,然后对它们调用一个已知名称的函数。在本例中,我将创建另一个名为“Divide”的类,或另一个名为“concatatite”的类等,但是在实际程序中,这些类都将执行非常不同的操作,具有不同的属性、方法等,其中一个函数(“上例中的DoAction”)共享语法和返回类型
请帮忙!我在这上面撞了一段时间了
蒂亚 根据Hans Passant的评论,这是由于下一行的额外括号造成的
Activator.CreateInstance(typChosen, True)()
将此更改为
Activator.CreateInstance(typChosen, True)
解决问题 错误消息似乎建议您在错误的库(Microsoft.VisualBasic.dll)中查找类型“clsAddition”。您是否检查了“assem”是否指向正确的程序集?不清楚为什么您喜欢在CreateInstance()调用之后加上括号()。显然您没有,所以请删除它们以继续。@Nostromo找到类型引用,因为字符串值
Me.comObjectType.SelectedItem.ToString
包含完整的名称空间(在本例中为“WindowsApplication1.clsAddition”)。@HansPassant请您作为答案提交,以便我可以接受它。我不敢相信它一直盯着我的脸!