我可以将类引用作为参数传递给VBNet中的函数吗?

时间:2013-06-09 06:49:57

标签: vb.net vb.net-2010

如果我使用不正确的术语或听起来像一个完整的菜鸟,请原谅我。

在类库中调用sub时,我想传递的不是实例化的表单,而只是对表示表单的类的引用。然后我想从类库函数中实例化表单。这可能吗?

如下所示:

在主要应用程序中:

ClassLib.MyClass.DisplayForm(GetType(Form1))

然后,在课程库中:

Public Class MyClass

    Public Shared Sub DisplayForm(WhichFormClass As Type)
        Dim MyForm as Form = WhichFormClass.CreateObject() 'Getting imaginitive
        MyForm.ShowDialog()
    End Sub

End Class

希望我的例子传达了我想要完成的事情。如果你认为我的做法是假的,我会接受其他策略。

2 个答案:

答案 0 :(得分:5)

除了MotoSV的答案之外,这里还有一个仅使用泛型的版本:

Public Shared Sub DisplayForm(Of T As {New, Form})()
    Dim instance = New T()
    instance.ShowDialog()
End Sub

您可以使用:

DisplayForm(Of Form1)()

使用这种方法,您可以确保传递的类型是表单,并且实例具有ShowDialog()方法。没有必要的演员可能最终失败。但是,有必要在设计时知道类型参数以调用方法。

答案 1 :(得分:3)

尝试

Dim classType As Type = GetType(Form1)

然后调用方法:

DisplayForm(classType)

然后,您可以使用此类型信息和反射在DisplayForm方法中在运行时创建实例:

Activator.CreateInstance(classType)

请注意,这是一个简单的示例,不执行错误检查等。您应该阅读更多关于反射的内容,以确保您处理任何潜在的问题。

编辑1:

简单示例:

Public Class MyClass

    Public Shared Sub DisplayForm(ByVal formType As Type)
        Dim form As Form = DirectCast(Activator.CreateInstance(formType), Form)
        form.ShowDialog()
    End Sub

End Class

您可以使用以下方法:

Dim formType As Type = GetType(Form1)
MyClass.DisplayForm(formType)

同样,最好在所有这些中执行一些错误检查。