當前位置:編程學習大全網 - 編程語言 - 編程組件功能

編程組件功能

組件和控件之間的差異:

1,組件不能在運行時渲染UI,而控件可以在運行時渲染UI(但vs 2005中ASP.NET的SqlDataSource是控件,但不能渲染UI)。

2.組件附加到容器,而控件附加到Windows窗體或Web窗體。

例如,SqlCommand是壹個組件,DataGrid是壹個控件。

類別:

如果您的類使用外部資源而不是設計圖面,請實現System。或者從直接或間接實現IDisposable的類派生。

如果要在設計圖面(如Windows窗體或Web窗體設計器)上使用您的類,請實現System。組件模型。IComponent,或者從直接或間接實現iComponent的類派生。註意,IComponent擴展了IDisposable,因此IComponent類型始終是IDisposable類型。與非IComponent的IDisposable類型相比,IComponent類型的性能系統開銷更小。但是這種不足通常可以通過在設計時和運行時安裝IComponent來彌補。(本主題稍後將解釋此放置功能)。

如果您希望該類是可設計的(在設計圖面上使用)並且可通過引用進行封送處理,則可以從system派生它。Component model . Component . Component是通過引用封送的IComponent類型的基本實現。

如果希望可設計的類按值封送,可以從system派生它。組件模型。marshalbyvaluecomponent。MarshalByValueComponent是按值封送的IComponent類型的基實現。

如果要將IComponent類型引入對象模型層次結構,但由於單壹繼承而無法從Component或MarshalByValueComponent等基派生,請實現IComponent。

如果妳需要壹個提供用戶界面的可設計類,它就是控件。控件必須直接或間接從以下控件基類之壹派生:System。Windows.Forms.Control或System。Web.UI .控件

註意

如果您的類既不是可設計的類,也不包含外部資源,則不需要IComponent或IDisposable類型。

以下是組件、控件、容器和站點的定義。

包裹

在。NET Framework中,組件是指實現系統的類。組件模型。IComponent接口,或者從實現iComponent的類直接或間接派生的類。在編程中,“組件”壹詞通常用於表示可以重用並與其他對象交互的對象。的。NET Framework組件滿足這些壹般要求,並且還提供控制外部資源和設計時支持等功能。

控制外部資源

IComponent接口擴展了IDisposable接口,該接口在其協定中有壹個名為Dispose的方法。在其Dispose方法實現中,組件必須顯式釋放外部資源。與垃圾收集期間的默認和不確定的清理相比,這提供了壹種明確的釋放資源的方法。開發人員必須在整個容器層次結構中傳播Dispose,以確保組件的子組件同時釋放資源。此外,派生組件必須調用其基類的Dispose方法。

註意

即使您通過Dispose提供對資源的顯式控制,也應該始終通過終結器(析構函數)提供隱式清理,以防止當用戶未能對組件調用Dispose時資源被永久泄漏。

下面的示例演示如何在基組件和派生組件中實現Dispose。

C#

公共類BaseComponent : IComponent {

// IComponent擴展IDisposable。

public void Dispose() {

Dispose(真);

GC。suppress finalize(this);

}

受保護的虛擬void Dispose(bool disposing) {

如果(處置){

//釋放其他狀態(托管對象)。

}

//釋放自己的狀態(非托管對象)。

}

//簡單調用Dispose(false)。

~BaseComponent(){

Dispose(假);

}

}

//派生組件。

公共類derived component:base component {

受保護的覆蓋void Dispose(bool disposing) {

如果(處置){

//釋放其他狀態。

}

//必須調用基類的Dispose方法。

基地。Dispose(處置);

//解放自己的國家。

...

}

//沒有終結器/析構器。

//沒有Dispose()方法。

}

設計時支持

在。NET Framework中,組件的壹個重要功能是它們是可設計的,這意味著作為組件的類可以在Visual Studio等快速應用程序開發(RAD)環境中使用。您可以將組件添加到Visual Studio的工具箱中,將組件拖放到窗體上,並在設計圖面上操作組件。請註意,對IComponent類型的基本設計時支持已內置於。NET框架;組件開發人員可以利用基本的設計時功能,而無需額外的工作。

有關設計時支持的更多信息,請參見組件的設計時屬性和擴展的設計時支持。

軸承裝配

組件可以放置(承載)在容器中(在本主題的後面部分定義)。當放置壹個組件時,它通過其站點(在本主題後面定義)與容器進行交互,並且可以通過該站點從其容器中查詢和獲取服務。為了確保容器被分解後資源被釋放,容器必須實現IDisposable接口。在其Dispose方法的實現中,容器必須釋放它保留的所有資源,並調用它包含的每個組件的Dispose方法。

公差是邏輯的,不需要視覺表現。放置數據庫組件的中間層容器是非可視化包含的壹個例子。Visual containment可以在Visual Studio的Windows窗體設計器和Web窗體設計器中找到。可視化設計圖面是承載表單組件(Web表單中的頁面組件)的容器。

密封組件

組件可能是也可能不是可遠程控制的。可以遠程控制的組件通過引用或值進行封送。封送處理涉及跨邊界發送對象,例如應用程序域(輕量級進程)、進程甚至計算機。當通過引用封送對象時,會創建壹個代理來遠程調用該對象。當對象由值封送時,對象的序列化副本將跨相關邊界發送。

以下可遠程控制的組件應通過引用來封送:封裝系統資源的可遠程控制的組件、大型可遠程控制的組件或作為單個實例存在的可遠程控制的組件。通過引用封送的組件的基類是system。該基類實現IComponent並從MarshalByRefObject派生。中的許多組件。NET框架類庫是從組件派生的,包括系統。窗戶。表格。控件(Windows窗體控件的基類)、系統。WebService(使用由ASP.NET創建的XML Web services的基類)和System。Timers.Timer(生成遞歸事件的類)。

只保留狀態的可遠程控制的組件應該通過值來封送。由值封送的組件的基類是system。組件模型。marshalbyvaluecomponent。此基類實現IComponent並從Object派生。中只有幾個組件。NET Framework類庫派生自MarshalByValueComponent。所有這些組件都在系統中。數據命名空間(DataColumn、DataSet、DataTable、DataView和DataViewManager)。

註意

按值和按引用封送的對象的基類分別是object和MarshalByRefObject,但對應的派生類命名為MarshalByValueComponent和Component。命名方案背後的邏輯是,越常用的類型,它們的名稱就越簡單。

如果不遠程控制組件,就不要從Component的基實現派生,而是直接實現IComponent。

有關對象遠程控制的更多信息,請參見。NET遠程處理概述。

控制

控件是提供(或實現)用戶界面(UI)功能的組件。的。NET Framework為控件提供了兩個基類:壹個用於客戶端Windows窗體控件,另壹個用於ASP.NET服務器控件。他們是系統。Windows.Forms.Control和System。控件中的所有控件。NET Framework類庫直接或間接從這兩個類派生。系統。Windows.Forms.Control派生自組件,本身提供UI功能。系統。Web.UI.Control實現了IComponent,並提供了壹個可以輕松添加UI函數的基礎結構。

註意

每個控件都是壹個組件,但不是每個組件都是控件。

在中編寫Windows窗體控件。net環境很簡單,只要直接和間接從System繼承。Windows.Forms.Control,控件類為我們提供了很多高級功能。如:窗口句柄、管理消息、鼠標和鍵盤事件、視覺屬性(顏色、大小、位置)、安全和線程支持等。有了這些高級功能,我們寫Windows窗體控件就容易多了,同時也可以更加關註應該註意的地方,比如如何繪制UI,綁定和顯示數據。

下編寫Windows窗體控件有三種方法。網。從系統派生的自定義控件。Windows.Forms.Control,從現有控件派生的擴展控件(如System。Windows.Forms.TextBox),從system . windows . forms . usercontrol派生的組合控件,很多朋友分不清user control和Control的區別,也不知道從哪個類派生。簡單來說,UserControl比Control更高級,提供更高級的功能。Control類只提供控件所需的所有基本功能(包括鼠標和鍵盤處理事件),但不提供可視化UI。因此,如果它是從控件派生的,用戶必須重寫OnPaint。UserControl為我們提供了比Control更多的功能,但也失去了更多的靈活性。

設計組件和控件時,請考慮:

設計器,顧名思義,是為組件設計時服務的。設計器可以在設計時修改組件的行為,並提供自己的服務和行為。

英寸net中,如果要為控件或組件自定義壹個設計器,只需要從IDesigner中繼承即可,但是在。net,ms已經幫我們做了繼承自IDesigner的兩個基類,ComponentDesigner和ControlDesigner。ComponentDesigner是為組件設計的,ControlDesigner是為控件設計的,所以我們可以直接從ComponentDesigner繼承。

設計器可以在右擊快捷菜單上提供菜單命令,我們可以通過實現ComponentDesigner Verbs屬性來定義get訪問器。此訪問器返回的DesignerVerb對象包含用於生成菜單命令的DesignerVerb對象。同時我們自定義了組件雙擊時的默認操作,可以在組件設計器中實現DoDefaultAction方法。

組件的文檔設計器

每個組件不僅有壹個組件設計器,還有壹個組件文檔設計器。但是這兩個設計師有什麽區別呢?讓我用更通俗的方式告訴妳區別。組件設計器是指當組件被拖放到表單或頁面的容器上時出現的UI設計器(圖1)。Component DocumentDesigner指的是組件本身的根文檔設計器(圖2)。

12

容器和地點

如果您正在為Windows窗體或Web窗體頁(ASP.NET頁)開發組件和控件,則不需要實現容器或站點。Windows窗體和Web窗體的設計器是Windows窗體和ASP.NET服務器控件的容器。容器為放置在其中的組件和控件提供服務。在設計時,控件被放置在設計器中,並從設計器獲取服務。為了保持完整性,下面給出了容器和站點的定義。

容器

容器是實現系統的類。組件模型。Icontainer接口,或從實現該接口的類派生的類。容器在邏輯上包含壹個或多個組件,這些組件稱為容器的子組件。

位置

站點是實現系統的類。ComponentModel.ISite接口,或者從實現該接口的類派生的類。容器提供了壹個站點來管理其子組件並與其通信。通常,容器和站點作為壹個單元來實現。

  • 上一篇:下壹站我的大學科技巨頭結局攻略
  • 下一篇:中山大學教育學院的學院各系
  • copyright 2024編程學習大全網