VB.net中反射的應用舉例

Imports System.Reflection
Imports System.Activator
Public Class Form1
    Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        Dim dllPath As String = "DLL名稱"

       ’導入DLL
        Dim a As Assembly = Assembly.LoadFrom(dllPath)
        Dim key As String = "命名空間" + "." + "類名"

        '獲取類的類型
        Dim b As Type = a.GetType(key)

       ‘根據獲取的類生成這個類的一個實例
        Dim c As Object = Activator.CreateInstance(b)
        Dim methodname As String = "方法名"

        ’根據獲取的類,得到指定方法的信息
        Dim d As MethodInfo = b.GetMethod(methodname)
        '調用方法執行
        d.Invoke(c, New Object() {"參數1", "參數2"})
    End Sub
End Class

利用反射機制可以實現根據讀取的外部配置文件(配置文件中要記錄以下信息:調用的DLL名稱,DLL中類的命名空間,類名,方法名,方法的參數)的形式,對於程序運行中的實際執行語句進行定製,從而實現高度的邏輯可變。

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

.net和com組件的互操作問題,請參見Visual basic 2008高級編程介紹,裏面有一章內容寫的很好,很全;從來不要試圖去懷疑VB這門編程語言的劣勢!

‘通過ProgID返回COM對象類型
dim comType as type  = type.GetTypeFromProgID("工程名.類名")
’通過CLSID返回COM對象類型
‘dim clsid as Guid= new Guid("例如:270B58ED-DDCB-4E2E-A7A5-D1998016A36D")
dim comType as type = Type.GetTypeFromCLSID(clsid)
‘創建COM對象實例
dim comObj as Object= Activator.CreateInstance(comType)
’設置參數
dim paras as Object()= { 3, 8 }
‘調用方法Add
dim result as Object= comType.InvokeMember("方法名", BindingFlags.InvokeMethod, nothing, comObj, paras);


發佈了66 篇原創文章 · 獲贊 7 · 訪問量 19萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章