C# 動態載入控制項

來源:互聯網
上載者:User

控制項,在實現快速開發中起著非常重要的作用,它可以將某一特定功能封裝起來,供可戶程式員調用,更重要的是它還可以實現外掛程式式開發,使軟體的靈活性、可擴充 性大大增強。在網路上,也有很多動態載入控制項、動態調用類成員等的資料。

動態載入,最基本用到的就是反射機制。在System.Reflection的namespace下有一系列的關於擷取Assembly資訊、類(型)資訊 的類、介面、結構等。可能上面的話對急切想實現動態載入控制項的朋友來說可能一點用也沒有,那麼就看下面的代碼吧,也許可以使你馬上實現你想要的:

1.載入控制項
Assembly assembly = Assembly.LoadFrom(@"C:Controls.dll");

2.獲得類(型)
Type type = assembly.GetType("Controls.UserControl",false,true);

3.設定篩選標誌
BindingFlags bflags = BindingFlags.DeclaredOnly | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance;

4.調用建構函式並獲得對象
Object obj = type.InvokeMember("UserControl", bflags | BindingFlags.CreateInstance, null, null, null);

5.將對象轉換類型
System.Windows.Forms.Control control = (Control)obj;

6.將控制項添加到表單
this.Controls.Add(control);

====================================================================================
下面對上面程式段用到的一些變數、方法做一點說明

1.BindingFlags 枚舉類型
BindingFlags.Instance : 對象執行個體
BindingFlags.Static : 靜態成員
BindingFlags.Public : 指可在搜尋中包含公用成員
BindingFlags.NonPublic : 指可在搜尋中包含非公用成員(即私人成員和受保護的成員)
BindingFlags.FlattenHierarchy : 指可包含階層上的靜態成員
BindingFlags.IgnoreCase : 表示忽略 name 的大小寫
BindingFlags.DeclaredOnly : 僅搜尋 Type 上聲明的成員,而不搜尋被簡單繼承的成員
BindingFlags.CreateInstance : 表示調用建構函式。忽略 name。對其他調用標誌無效

2.Type.InvokeMember
public object InvokeMember(
string name,
BindingFlags invokeAttr,
Binder binder,
object target,
object[] args
);

參數
name
String,它包含要調用的建構函式、方法、屬性或欄位成員的名稱。 或 Null 字元串 (""),表示調用預設成員。

invokeAttr
一 個位屏蔽,由一個或多個指定搜尋執行方式的 BindingFlags 組成。 訪問可以是 BindingFlags 之一,如Public、 NonPublic、Private、 InvokeMethod 和 GetField 等。不需要指定尋找類型。如果省略尋找類型, 則將應用 BindingFlags.Public | BindingFlags.Instance。

binder

一個 Binder 對象,該對象定義一組屬性並啟用綁定,而綁定可能涉及選擇重載方法、 強制參數類型和通過反射調用成 員。 - 或 - 若為空白引用(Visual Basic 中為 Nothing),則使用 DefaultBinder。

target 要在其上調用指定成員的 Object。

args 包含傳遞給要調用的成員的參數的數組。

傳回值 表示被調用成員的傳回值的 Object。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.