自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

ASP.NET組件設(shè)計之復(fù)雜屬性和狀態(tài)管理淺析

開發(fā) 后端
ASP.NET組件設(shè)計之復(fù)雜屬性和狀態(tài)管理向你講解了在ASP.NET組件設(shè)計中復(fù)雜屬性和狀態(tài)管理的實現(xiàn)以及需要注意的方面。

ASP.NET組件設(shè)計中復(fù)雜屬性和狀態(tài)管理的討論:

ASP.NET組件設(shè)計之復(fù)雜屬性聲明/持久:

所謂復(fù)雜屬性,即通常不可用CLR的基本數(shù)據(jù)類型表達(dá)的屬性。譬如,F(xiàn)ontInfo,即代表字體屬性,包含Bold 、Name、Size、Color等信息(通常稱為子屬性)。

對于復(fù)雜屬性,控件在聲明時候,通常采用 屬性—子屬性 的連字符表示復(fù)雜屬性的一個子屬性。

  1. ﹤sdp:TextBox id=”Textbox1” Font-Name=”Vender” Font-Size=”12pt” runat=”server” /﹥ 

其中的劃線部分即代表了Font屬性。

復(fù)雜屬性的另外一種表達(dá)是,將復(fù)雜屬性嵌套放于控件聲明標(biāo)簽之中,乘坐 內(nèi)部屬性持久性(inner property persistence )。如:

  1. ﹤asp:DataGrid runat=”Server”﹥  
  2.  
  3. ﹤HeaderStyle ForeColor=”Red” /﹥  
  4.  
  5.    ﹤/asp:DataGrid ﹥ 

復(fù)雜屬性序列化/持久化的設(shè)計時支持

設(shè)計時實現(xiàn)是在控件之外實現(xiàn)的,利用元數(shù)據(jù)(attribute)來實現(xiàn)。對于連字符實現(xiàn)的子屬性,經(jīng)過設(shè)定特定的attribute,即可影響設(shè)計器從而實現(xiàn)設(shè)計時支持。

DesignerSerializationVisibility 實際上在ASP.NET中是指DesignerSerializationVisibilityAttribute的屬性類,通過元數(shù)據(jù)中指定,并且設(shè)為:

DesignerSerializationVisibility.Content可以讓設(shè)計器知道,應(yīng)當(dāng)將復(fù)雜屬性的內(nèi)容進(jìn)行序列化而不是屬性本身

DesignerSerializationVisibility.Hidden       讓設(shè)計器忽略屬性和屬性內(nèi)容

DesignerSerializationVisibility.Visible       讓設(shè)計器以正常方式序列化

所謂正常方式,就是以字符傳、整型如果不屬于這些就用字節(jié)方式持久化屬性(當(dāng)然對于復(fù)雜屬性這相當(dāng)劃不來)。

NotifyParentProperty(true) 表示屬性瀏覽器對控件得此復(fù)雜屬性的修改可以通告給控件,并告知之上的各個對象(通常會給設(shè)計器應(yīng)用程序),告知屬性已經(jīng)“臟”了。這些約定對控件設(shè)計者和設(shè)計器開發(fā)者以及ASP.NET頁面的開發(fā)者都很重要。

對于標(biāo)簽嵌套方式的屬性持久,應(yīng)當(dāng)采用ParseChilren(true)來指定屬性的持久,設(shè)計器實現(xiàn)嵌套方式則應(yīng)當(dāng)指定PersistChildren(false)讓設(shè)計器將嵌套標(biāo)簽轉(zhuǎn)化為復(fù)雜屬性的一部分(而不是內(nèi)嵌的子控件)

ASP.NET組件設(shè)計之類型轉(zhuǎn)換器

為了解讀復(fù)雜屬性的持久形式為設(shè)計運行時形式,需要對復(fù)雜屬性指定類型轉(zhuǎn)換器,基本目標(biāo)是將持久形式解讀轉(zhuǎn)換為CLR支持的類型,同時也將屬性的CLR類型表達(dá)為設(shè)計時、運行時的持久形式。即將Font-Size=”8pt”轉(zhuǎn)換為int32 的8,將復(fù)雜屬性的8持久化為Font-Size=”8pt”.

類型轉(zhuǎn)換器的實現(xiàn)不依賴于任何用戶界面功能。因此,可在 Windows 窗體和 Web 窗體中應(yīng)用同一個類型轉(zhuǎn)換器。

類型轉(zhuǎn)換器繼承自System.ComponentModel.TypeConverter。

ASP.NET組件設(shè)計之實現(xiàn)類型轉(zhuǎn)換器的步驟:

1、 定義一個從 System.ComponentModel.TypeConverter 派生的類。

2、 重寫 CanConvertFrom 方法,指定轉(zhuǎn)換器可從中轉(zhuǎn)換的類型。此方法是重載方法。

3、 重寫實現(xiàn)轉(zhuǎn)換的 ConvertFrom 方法。此方法是重載方法。

4、 重寫 CanConvertTo 方法,指定轉(zhuǎn)換器可轉(zhuǎn)換為的類型。轉(zhuǎn)換為字符串類型不需要重寫此方法。此方法是重載方法。

5、 重寫實現(xiàn)轉(zhuǎn)換的 ConvertTo 方法。此方法是重載方法。

6、 重寫執(zhí)行驗證的 IsValid 方法。此方法是重載方法。

通過TypeConverter(typeof(somecustimoziedTypeConverter))的方式確定某個屬性同特定的類型轉(zhuǎn)換器相關(guān)。

對于ASP.NET應(yīng)用來講,如何保持兩個頁面間的控件的復(fù)雜屬性很重要。Control類的默認(rèn)狀態(tài)管理交給ViewSatte字典,而復(fù)雜屬性,使用ViewState時不可能的,這必須用到IstateManager接口參與狀態(tài)管理。

  1.  
  2. Interface IstateManager  
  3.  
  4. {  
  5.  
  6.    public bool IsTrackingViewState ;
  7.  //當(dāng)由類實現(xiàn)時,獲取一個值,通過該值指示服務(wù)器控件是否正在跟蹤其視圖狀態(tài)更改。   
  8.  
  9.        void LoadViewState(   object state); 
  10. //當(dāng)由類實現(xiàn)時,加載服務(wù)器控件以前保存的控件視圖狀態(tài)。   
  11.  
  12. object SaveViewState(); 
  13. //當(dāng)由類實現(xiàn)時,將服務(wù)器控件的視圖狀態(tài)更改保存到 Object。   
  14.  
  15. void TrackViewState();
  16. //當(dāng)由類實現(xiàn)時,指示服務(wù)器控件跟蹤其視圖狀態(tài)更改。  
  17.  

ASP.NET組件設(shè)計之Control,Control的ViewSatte屬性實際上就是一個復(fù)雜屬性,本質(zhì)上是一個字典類,通過實現(xiàn)了IstateManager接口參與狀態(tài)管理(ViewState的細(xì)節(jié)):

1、 ViewState的數(shù)據(jù)類型是復(fù)雜屬性System.Web.UI.StateBag類。實現(xiàn)IstateManager接口的字典。保存多項鍵/值對,鍵為字符串,值為對象,當(dāng)某個對象自動添加到State把實例即ViewState中去時,自動加入一個StateItem對象,存有實際的屬性值和相關(guān)的布爾標(biāo)志,知識此屬性(StateItem)在初始化后修改過。

2、 在接口的TrackViewState中將此函數(shù)的值對應(yīng)到StateBag的內(nèi)部布爾變量,如果為真,則當(dāng)StateItem添加時候(跟蹤一個對象的ViewState),或者修改行為,都將StateItem標(biāo)記為修改過。

3、 SaveViewSate中,枚舉項目,創(chuàng)建并返回兩個ArrayList分別標(biāo)記修改過的鍵和值。

4、 LoadViewSatet執(zhí)行SaveState的逆操作。

當(dāng)在ViewSatte中保存屬性時候,其狀態(tài)會自動維護(hù)??梢栽赩iewState中保存任何控減災(zāi)往返傳送時需要的數(shù)(而不是全部數(shù)據(jù),從效率考慮剔除冗余數(shù)據(jù)),且任何保存在ViewState紅的數(shù)據(jù)必須時通過LosFormatter串行化的

所有復(fù)雜屬性的狀態(tài)保存應(yīng)當(dāng)實現(xiàn)IstateManager來將復(fù)雜屬性轉(zhuǎn)換為可以在ViewState中保存的簡單屬性,并且也可以ViewState中保存的簡單屬性恢復(fù)組合為復(fù)雜屬性。

ASP.NET組件設(shè)計之復(fù)雜屬性和狀態(tài)管理的相關(guān)內(nèi)容就向你介紹到這里,希望對你學(xué)習(xí)ASP.NET組件設(shè)計中的復(fù)雜屬性和狀態(tài)管理有所幫助。

【編輯推薦】

  1. ASP.NET組件設(shè)計學(xué)習(xí)之ASP.NET服務(wù)器控件
  2. ASP.NET自定義控件入門淺析
  3. ASP.NET服務(wù)器控件視圖淺析
  4. ASP.NET組件設(shè)計之生命周期詳解
  5. ASP.NET組件設(shè)計之傳輸機(jī)制淺析
責(zé)任編輯:仲衡 來源: cnblogs
相關(guān)推薦

2009-08-05 16:53:14

ASP.NET組件設(shè)計

2009-08-10 13:32:15

ASP.NET TimASP.NET組件設(shè)計

2009-08-05 16:59:55

ASP.NET組件設(shè)計

2009-08-06 18:18:27

ASP.NET控件開發(fā)ASP.NET復(fù)合控件

2009-07-29 09:34:54

IsPostBack屬ASP.NET

2009-08-10 14:38:29

ASP.NET組件設(shè)計

2009-08-10 15:42:33

ASP.NET Che

2009-08-10 16:07:44

ASP.NET Lin

2009-08-07 17:49:44

控件設(shè)計器

2009-07-22 18:03:00

ASP.NET ASP

2009-08-10 10:19:47

ASP.NET組件設(shè)計

2009-08-07 16:32:52

ASP.NET控件設(shè)計時支

2009-08-07 17:59:35

控件設(shè)計器

2009-07-31 12:43:59

ASP.NET MVC

2009-08-05 15:50:13

ASP.NET優(yōu)點

2009-08-05 17:39:13

ASP.NET常用狀態(tài)

2009-08-06 18:32:00

ASP.NET控件開發(fā)ASP.NET復(fù)合控件

2009-08-06 17:13:56

ASP.NET自定義控

2009-07-24 13:41:15

ASP.NET AJA

2009-08-05 18:36:12

ASP.NET Che
點贊
收藏

51CTO技術(shù)棧公眾號