微軟即將發(fā)布的 visual studio .net 將使程序開發(fā)人員獲得一個(gè)集 成開發(fā)環(huán)境,它不但為開發(fā)傳統(tǒng)的 c/c++ 應(yīng)用程序,而且也為令人振奮 的 microsoft .net 組件提供了豐富的工具。這些以管理代碼編寫、在通 用語言運(yùn)行時(shí)構(gòu)建的組件向開發(fā)人員提供了一個(gè)全新的混合開發(fā)環(huán)境,即 象 microsoft visual basic 一樣容易,而同時(shí)又提供了強(qiáng)大的低級編程 能力,與 atl 或 mfc 更加相關(guān)。隨著以生產(chǎn)效率為中心的管理環(huán)境的到 來,它可與傳統(tǒng) com 組件很好地協(xié)同工作。開發(fā)人員可以將更多時(shí)間花 在構(gòu)建大型組件上,而不用再為內(nèi)存泄漏、安全和頭文件擔(dān)心。
除了提供microsoft .net framework組件的開發(fā)外,visual studio .net (vs .net) 還擁有很多工具,可以讓組件利用 vs .net 中設(shè)計(jì)器架 構(gòu)的優(yōu)勢來設(shè)計(jì)出在外觀和性能上與 vs .net 所附帶組件相近的產(chǎn)品。 在開發(fā)管理組件時(shí),在 vs.net 設(shè)計(jì)器中獲得的所有特性都使用組件本身 的 .net framework,從而獲得設(shè)計(jì)時(shí)與運(yùn)行時(shí)組件之間的緊密集成。
組件是什么
很顯然, microsoft . net framework 組件很容易編寫。 讓它們與 visual studio . net 設(shè)計(jì)器一同工作的唯一要求是,它們實(shí)現(xiàn) system. componentmodel.icomponent,即通常表明繼承于icomponent的默認(rèn)應(yīng)用。 icomponent使組件可跟蹤設(shè)計(jì)時(shí)的信息(如它的容器組件或名稱)或訪問 設(shè)計(jì)器提供的服務(wù)。
讓我們編寫一個(gè)簡單的 .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); }
通過一個(gè)典型實(shí)例可以更容易理解這一概念。比如我們不希望 value 屬性在屬性瀏覽器中顯示。我們可添加一個(gè)元數(shù)據(jù)屬性 system.component model.browsableattribute 來控制一個(gè)屬性是否可被瀏覽。
[browsable(false)] public bool value { get { return state; } set { if (this.state != value) { this.state = value; onvaluechanged(new eventargs()); } } }