簡體   English   中英

我可以將類引用作為參數傳遞給VBNet中的函數嗎?

[英]Can I pass a class reference as a parameter to a function in VBNet?

如果我使用不正確的術語或聽起來像一個完整的菜鳥,請原諒我。

在類庫中調用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

希望我的例子傳達了我想要完成的事情。 如果你認為我的做法是假的,我會接受其他策略。

除了MotoSV的答案之外,這里還有一個只使用泛型的版本:

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

您可以使用如下:

DisplayForm(Of Form1)()

使用此方法,您可以確保傳遞的類型是表單,並且實例具有ShowDialog()方法。 沒有必要的演員可能最終失敗。 但是,有必要在設計時知道類型參數以調用該方法。

嘗試

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)

同樣,最好在所有這些中執行一些錯誤檢查。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM