微軟即將發布的 Visual Studio .Net 將使程序開發人員獲得一個集 成開發環境,它不但為開發傳統的 C/C++ 應用程序,而且也為令人振奮 的 Microsoft .Net 組件提供了豐富的工具。這些以管理代碼編寫、在通 用語言運行時構建的組件向開發人員提供了一個全新的混合開發環境,即 象 Microsoft Visual Basic 一樣容易,而同時又提供了強大的低級編程 能力,與 ATL 或 MFC 更加相關。隨著以生產效率為中心的管理環境的到 來,它可與傳統 COM 組件很好地協同工作。開發人員可以將更多時間花 在構建大型組件上,而不用再為內存洩漏、安全和頭文件擔心。
除了提供Microsoft .Net Framework組件的開發外,Visual Studio .NET (VS .NET) 還擁有很多工具,可以讓組件利用 VS .Net 中設計器架 構的優勢來設計出在外觀和性能上與 VS .Net 所附帶組件相近的產品。 在開發管理組件時,在 VS.Net 設計器中獲得的所有特性都使用組件本身 的 .Net Framework,從而獲得設計時與運行時組件之間的緊密集成。
組件是什麼
很顯然, Microsoft . NET Framework 組件很容易編寫。 讓它們與 Visual Studio . NET 設計器一同工作的唯一要求是,它們實現 System. ComponentModel.IComponent,即通常表明繼承於IComponent的默認應用。 IComponent使組件可跟蹤設計時的信息(如它的容器組件或名稱)或訪問 設計器提供的服務。
讓我們編寫一個簡單的 .Net 組件,它的形式如下:
using System; using System.ComponentModel; public class BoolTracker : Component { private bool state; private EventHandler handler; private static object EventValueChanged = new object();
public BoolTracker() { }
public bool Value { get { return state; } set { if (this.state != value) { this.state = value; OnValueChanged(new EventArgs()); } } }
public void AddOnValueChanged(EventHandler h) { handler = (EventHandler)Delegate.Combine(handler, h); }
通過一個典型實例可以更容易理解這一概念。比如我們不希望 Value 屬性在屬性浏覽器中顯示。我們可添加一個元數據屬性 System.Component Model.BrowsableAttribute 來控制一個屬性是否可被浏覽。
[Browsable(false)] public bool Value { get { return state; } set { if (this.state != value) { this.state = value; OnValueChanged(new EventArgs()); } } }