C#,動態載入DLL,通過反射,調用參數,方法,表單

來源:互聯網
上載者:User

標籤:

.net中常會用到動態載入DLL,而DLL中可能包含各種參數、方法、表單,如何來調用動態載入這些參數、方法、表單呢?

 

在C#中,我們要使用反射,首先要搞清楚以下命名空間中幾個類的關係:

System.Reflection命名空間

(1)   AppDomain:應用程式定義域,可以將其理解為一組程式集的邏輯容器

(2)   Assembly:程式集類

(3)   Module:模組類

(4)   Type:使用反射得到類型資訊的最核心的類

他們之間是一種從屬關係,也就是說,一個AppDomain可以包含N個Assembly,一個Assembly可以包含N個Module,而一個Module可以包含N個Type.

 

在程式中,如果我們要動態載入一個程式集有以下種方式可以使用,分別是Load、LoadFrom、LoadFile、LoadWithPartialName方法.

其中著重講解以下Assembly.LoadFile 與 Assembly.LoadFrom的區別

1、Assembly.LoadFile只載入相應的dll檔案,比如Assembly.LoadFile("abc.dll"),則載入abc.dll,假如abc.dll中引用了def.dll的話,def.dll並不會被載入。

Assembly.LoadFrom則不一樣,它會載入dll檔案及其引用的其他dll,比如上面的例子,def.dll也會被載入。

2、用Assembly.LoadFrom載入一個Assembly時,會先檢查前面是否已經載入過相同名字的Assembly,比如abc.dll有兩個版本(版本1在目錄1下,版本2放在目錄2下),程式一開始時載入了版本1,當使用Assembly.LoadFrom("2\\abc.dll")載入版本2時,不能載入,而是返回版本1。Assembly.LoadFile的話則不會做這樣的檢查,比如上面的例子換成Assembly.LoadFile的話,則能正確載入版本2。

LoadFile:載入指定路徑上的組件檔的內容。LoadFrom: 根據程式集的檔案名稱載入組件檔的內容。

 

最後是調用方法

Assembly outerAsm = Assembly.LoadFrom(@"urPath\MyDLL.dll");

調用DLL類中的方法

Type type = outerAsm .GetType("MyDLL.MyClass");//調用類型
MethodInfo method = type.GetMethod("MyVoid");//調用方法

 

//如果需要傳參數

object[] paramertors = new object[] { "3087", "2005" };//參數集合
object test = method.Invoke(null, paramertors);//Invoke調用方法

調用DLL中表單

Type outerForm = outerAsm.GetType( "MyForm" false );//找到指定視窗 (Activator.CreateInstance(outerForm)  as  Form).Show();//轉換成表單類,顯示

C#,動態載入DLL,通過反射,調用參數,方法,表單

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.