最能體現這種適應性的是動態集成新功能的能力。例如,在 Windows 窗體應用程序中,這種能力是指加載編譯原始應用程序很久以后創建的窗體的能力。
這種操作在 Microsoft Visual Basic® 6.0 中幾乎是不可能的,但是在 Visual Basic .NET 中卻相當容易。利用 System.Reflection 命名空間的功能,程序只需知道程序集的位置即可請求動態加載該程序集。然后即可加載該程序集中的類并對類進行實例化。由于 Windows 窗體也是一種類,這就意味著可以動態地加載、顯示和使用窗體,即使在編譯原始程序時窗體并不存在。
典型的方案假設我們有一個多文檔界面 (MDI) 應用程序,需要具有將任意窗體加載為子窗體的能力。那么應用程序應該能夠執行以下操作:
- 獲取可以加載的窗體的列表,通常不在 .NET 配置文件中。
- 顯示該列表并允許用戶從中選擇一個窗體。
- 實例化并顯示用戶選擇的窗體。
讓我們編寫這樣一個應用程序,看看如何完成動態加載。
步驟 1:創建項目和 MDI 窗體啟動一個新的 Windows 窗體項目。將其命名為 FormsOnTheFly。在新項目中包含的空窗體 Form1 中,將它的 IsMdiContainer 屬性更改為 True。這樣,該窗體即變成一個 MDI 父窗體。更改窗體的大小,使窗體的長和寬的尺寸大約為默認值的兩倍。
將一個面板控件拖動到窗體上,然后設置它的 Dock 屬性,使它靠接在窗體的頂部。更改面板的大小,使它的高度大約為 0.5 英寸。
將一個組合框拖動到面板上。將它命名為 cboForms,然后將它的 DropDownStyle 設置為 DropDownList。
最后,將一個按鈕拖動到面板上。將它命名為 btnLoadForm,然后將它的 Text 屬性設置為 Load Form。
此時,Form1 應如圖 1 所示。

圖 1:添加所有控件后處于設計模式下的 MDI 窗體
步驟 2:生成一個類,以存放可用窗體的數據我們將獲取可能從基于 XML 的配置文件之外加載的窗體的有關信息。但是,為了更便于在組合框中顯示可用窗體并獲取有關所選窗體的信息,還應建立一個對象集合。集合中的每個對象都將存放一個可用窗體的信息。對象應具有以下屬性:
- Description:顯示在組合框中的窗體說明。
- Location:窗體所在的 DLL 的文件名。
- Type:窗體的 .NET 類型的名稱(例如,MyProject.Form1)。
這樣的集合可以數據綁定到列表框中。要從列表框中返回對所選對象的引用,還需要一個屬性,我們稱之為 Reference。
要創建類,請選擇 Project | Add Class(項目|添加類),然后將類命名為 DynamicClass.vb。在類中添加以下代碼:
| Public Class DynamicClass Dim msLocation As String Public Sub New(ByVal sLocation As String, _ Public Property Location() As String Public Property Type() As String Public Property Description() As String Public ReadOnly Property Reference() As Object |