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请您作为答案提交,以便我可以接受它。我不敢相信它一直盯着我的脸!