九色国产,午夜在线视频,新黄色网址,九九色综合,天天做夜夜做久久做狠狠,天天躁夜夜躁狠狠躁2021a,久久不卡一区二区三区

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
控件和組件的區(qū)別
控件就是具有用戶界面的組件。要說的具體一點(diǎn),就得回顧早期 Windows 的歷史根源,當(dāng)時控件指任何子窗口——按鈕、列表框、編輯框或者某個對話框中的靜態(tài)文本。從概念上講,這些窗口——控件——類似用來操作收音機(jī)或小電器的旋鈕和按鈕。隨著控件數(shù)量的增加(組合框、日期時間控件等等),控件逐漸成為子窗口的代名詞,無論是用在對話框中還是用在其它種類的主窗口中。沒過多久 BASIC 程序員開始編寫他們自己專用的控件,自然而然地人們便想到共享這些控件。共享代碼的方法之一是通過磁盤拷貝,但那樣顯然效率低下。必須要有一種機(jī)制使開發(fā)者建立的控件能夠在其它程序員的應(yīng)用中輕而易舉地插入,這便是VBA控件,OLE控件,OCX和最后ActiveX 控件的動機(jī)。
  這就是控件和組件之間產(chǎn)生混淆之所在。因?yàn)闉榱私鉀Q控件的可復(fù)用問題,所有這些技術(shù)必須首先解決更為一般的組件重用問題。(COM,如果你還記得它的話,意思是組件對象模型)。在軟件行話中,組件這個術(shù)語指任何可復(fù)用的對象或任何可與其它對象交互的代碼體。子程序的發(fā)明,曾經(jīng)一度成為程序員趨之若鶩的軟件工程圣杯:一種統(tǒng)一的編程理論,它使程序員從基本構(gòu)建塊——也就是用所選語言編寫的各種組件建立大型系統(tǒng)。從子程序演變到OOP,到DLLs,再到COM,再到.NET框架的每一種新的編程范例都代表了一種不同的提供可重用性的方案。VBX使用DLLs的固化名稱。COM使用接口和IUnknown。.NET框架使用微軟的中間語言(MSIL)層和公共語言運(yùn)行時(CLR)來提供統(tǒng)一的粘合。

因此,控件是組件的一個主要樣本(并且歷史上曾驅(qū)動著組件的開發(fā)),控件又不僅僅是唯一的一種組件。組件不需要顯示任何信息或用戶界面。組件可能實(shí)現(xiàn)科學(xué)計(jì)算,收集性能數(shù)據(jù),計(jì)算1971年1月1日到現(xiàn)在的毫秒數(shù),仰或是讀取布什總統(tǒng)競選活動保險箱里的美金數(shù)。Figure 4 顯示了 Visual Studio .NET 中的非控件組件例子。


Figure 4 組件

在 .NET 框架中,術(shù)語控件和組件為 .NET 賦予了專門的意義。Component 類為被用于設(shè)計(jì)層面的對象如 Windows Forms Designer (Windows 窗體設(shè)計(jì)器)或 Web Forms Designer (Web 窗體設(shè)計(jì)器)提供了基本實(shí)現(xiàn)。某個 Component 是任何可以被拽到某個窗體的任何東西。Component 類實(shí)現(xiàn)IComponent,ISite 和 IContainer。這些接口比起其來自 OLE 時期的 COM 堂兄弟要簡單得多。 IContainer 比起帶有 Add/Remove 方法的組件列表以及組件屬性來要稍微復(fù)雜一點(diǎn),它獲得的組件是一個 ComponentCollection (組件集合)。
IComponent 從 IDisposable 派生而來,并且只有一個屬性,Site,獲取組件的ISite接口。Component 可能有,也可能沒有Site。ISite 有四個屬性,其中包括Name和DesignMode,它控制該組件是否處于——還能是什么?——設(shè)計(jì)模式。ISite 派生于另一個接口,IServiceProvider,它只有一個方法,GetService。在COM中,IServiceProvider 類似 QueryInterface——用它可以通過ID來查詢某個對象的接口,但是與 QueryInterface 不同的是該對象本身不用去實(shí)現(xiàn)這個接口,它僅僅知道在哪里和如何獲取它即可。同樣,在.NET框架中,IServiceProvider 是一種獲取其它接口或?qū)ο蟮耐ㄓ梅椒ā?wù)——對象不用實(shí)現(xiàn)它就知道的一種服務(wù)。
  .NET框架使得編寫可復(fù)用組件輕松自如,不再需要 IDL,不再需要類型定義語言,不再需要費(fèi)力的設(shè)計(jì)時支持。通過反射(reflection)的魔法,CLR 從代碼本身就已經(jīng)知道了該知道的一切,所有的類都在掌控之中。為了添加設(shè)計(jì)時支持,你只要用額外的設(shè)計(jì)器標(biāo)記你的屬性即可。例如,在托管C++中:
// in CMyControl[Category(S"Appearance")][Description(S"Specifies widget foreground color.")]_property Color get_ForeColor() { ... }_property void set_ForeColor(Color value) { ... }

現(xiàn)在窗體設(shè)計(jì)器在“外觀”(Appearance)中列出你的 ForeColor 屬性并使用幫助描述(Description)。有關(guān)設(shè)計(jì)時屬性的更多內(nèi)容,請參考.NET框架文檔中的“組件的設(shè)計(jì)時屬性”


Figure 5 類層次結(jié)構(gòu)

Figure 5 顯示了.NET框架中的類層次結(jié)構(gòu),它能說明上述討論的問題。正如你所看到的,Control 從
Component 派生而來。這是用另外一種方式來說明控件即組件(反之則不然)。更具體地講,控件是一個用用戶界面的組件——能繪制東西并能與用戶交互。Control 類還是所有托管窗口類的基類——窗體、按鈕、柵格、面板、工具欄等等。Control 類是定義 WndProc 和 ClientSize 以及所有標(biāo)準(zhǔn)窗口事件如 GotFocus 和 Click 的地方。Web控件(System.Web.UI.Control)也是組件,不過從嚴(yán)格的意義上講,它不是從 System.ComponentModel.Component 派生的。(對于 Web 控件,其名字空間為 System.Web.UI,Control 本身實(shí)現(xiàn) IComponent。)
  除了實(shí)現(xiàn) IComponent 之外,System.ComponentModel.Component 還提供了所有組件需要的列集支持,但它是通過從 MarshalByRefObject 派生來實(shí)現(xiàn)的。如果想生成一個值列集組件,可以從 MarshalByValueComponent 派生(它實(shí)現(xiàn)了 IComponent,IDisposable 和 IServiceProvider)。System.Data.DataColumn,DataSet 和 DataTable 都是是值列集組件的例子。這些對象跨機(jī)器/進(jìn)程邊界傳遞其實(shí)際數(shù)據(jù)。
  如果你正在編寫其他人也能用窗體設(shè)計(jì)器拖拽到其窗體的可重用的小組件,那么你必須從 Component 派生。如果你的小組件還具備用戶界面——能創(chuàng)建窗口,繪畫或與用戶交互——那么就應(yīng)該從 Control 派生

本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
組件類與普通類的區(qū)別
通過用 .NET 生成自定義窗體設(shè)計(jì)器來定制應(yīng)用程序
IComponent、IContainer、ISite
Windows Forms中通過自定義組件實(shí)現(xiàn)統(tǒng)一的數(shù)據(jù)驗(yàn)證(一) - 一個程序員的自省 ...
VB從入門到精通教程
適用于 Visual Basic 6.0 用戶的 Timer 控件
更多類似文章 >>
生活服務(wù)
熱點(diǎn)新聞
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服