[英]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.