欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

ASP.NET2.0服務(wù)器控件之類(lèi)型轉(zhuǎn)換器

 更新時(shí)間:2006年09月28日 00:00:00   作者:  

  類(lèi)型轉(zhuǎn)換器是實(shí)現(xiàn)自定義服務(wù)器控件屬性過(guò)程中比較重要的內(nèi)容。本文將對(duì)類(lèi)型轉(zhuǎn)換器的基本概念和實(shí)現(xiàn)方法進(jìn)行介紹。

  1. 類(lèi)型轉(zhuǎn)換器基本概念

  類(lèi)型轉(zhuǎn)換器是自定義服務(wù)器控件的輔助性功能實(shí)現(xiàn)。它主要用于執(zhí)行從字符串表示形式到指定類(lèi)型之間的雙向轉(zhuǎn)換。例如,以文本形式表示屬性值,將用戶輸入的文本轉(zhuǎn)換為相應(yīng)數(shù)據(jù)類(lèi)型等等,都應(yīng)用了類(lèi)型轉(zhuǎn)換器。

  對(duì)于多數(shù)基本數(shù)據(jù)類(lèi)型(如Int32、Bool、Char、String、枚舉類(lèi)型等),.net框架已經(jīng)為它們提供了默認(rèn)的類(lèi)型轉(zhuǎn)換器,這些類(lèi)型轉(zhuǎn)換器完成從字符串到相關(guān)值的轉(zhuǎn)換并執(zhí)行驗(yàn)證檢查的功能。默認(rèn)的類(lèi)型轉(zhuǎn)換器派生自System.ComponentModel.TypeConverter類(lèi),名為T(mén)ypeConverterNameConverter。例如,當(dāng)開(kāi)發(fā)人員在*.ASPx文件中設(shè)置服務(wù)器控件屬性時(shí)會(huì)發(fā)現(xiàn),某些屬性值為基本類(lèi)型,即Bool、Char、Enum、Int等,但是,一律被設(shè)置為String類(lèi)型,這就牽扯到一個(gè)類(lèi)型轉(zhuǎn)換的問(wèn)題。例如,屬性Height="150px",屬性值"150px"在設(shè)置時(shí)是String類(lèi)型,而這里的屬性值應(yīng)當(dāng)作為Unit類(lèi)型,那么所面臨的問(wèn)題就是必須要求頁(yè)面編譯器將字符串"150px"轉(zhuǎn)換為Unit類(lèi)型。通常情況下,對(duì)于屬性值為基本類(lèi)型的屬性,頁(yè)面編譯器將自動(dòng)應(yīng)用相關(guān)的類(lèi)型轉(zhuǎn)換器完成轉(zhuǎn)換工作。在剛才的例子中,頁(yè)面編譯器將自動(dòng)調(diào)用類(lèi)型轉(zhuǎn)換器System.Web.UI.WebControls.UnitConverter完成String類(lèi)型與Unit類(lèi)型之間的相互轉(zhuǎn)換。

  然而,上面的方法只能解決少數(shù)比較簡(jiǎn)單的類(lèi)型轉(zhuǎn)換問(wèn)題,并且在多數(shù)情況下,相關(guān)的類(lèi)型轉(zhuǎn)換過(guò)程都是默認(rèn)自動(dòng)完成的。當(dāng)默認(rèn)類(lèi)型轉(zhuǎn)換器無(wú)法滿足需要時(shí),例如,對(duì)于復(fù)雜屬性的情況,是沒(méi)有關(guān)聯(lián)的默認(rèn)類(lèi)型轉(zhuǎn)換器時(shí),則可以通過(guò)實(shí)現(xiàn)自定義類(lèi)型轉(zhuǎn)換器來(lái)實(shí)現(xiàn)。

  自定義類(lèi)型轉(zhuǎn)換器是本文的重點(diǎn)內(nèi)容。按照自定義類(lèi)型轉(zhuǎn)換器的功能分類(lèi),可以將自定義類(lèi)型轉(zhuǎn)換器分為3種:

  · 值翻譯的類(lèi)型轉(zhuǎn)換器;

  這種類(lèi)型轉(zhuǎn)換器最為常見(jiàn),它主要完成從字符串到值得轉(zhuǎn)換,或用于在設(shè)計(jì)時(shí)和運(yùn)行時(shí)進(jìn)行數(shù)據(jù)類(lèi)型之間的雙向翻譯。例如,實(shí)現(xiàn)從String類(lèi)型轉(zhuǎn)換為表示在二維平面中定義點(diǎn)的、整數(shù)X和Y坐標(biāo)的有序?qū)oint類(lèi)型,或者從Point類(lèi)型轉(zhuǎn)換為String類(lèi)型。此處的String類(lèi)型與Ponit類(lèi)型之間的雙向轉(zhuǎn)換,則需要實(shí)現(xiàn)一個(gè)值翻譯的類(lèi)型轉(zhuǎn)換器。

  · 向?qū)傩源翱谔峁?biāo)準(zhǔn)值列表的類(lèi)型轉(zhuǎn)換器;

  在Visual Studio 2005中包括控件屬性窗口。類(lèi)型轉(zhuǎn)換器可以為屬性窗口中控件的類(lèi)型提供一個(gè)值列表。當(dāng)開(kāi)發(fā)人員單擊值列表時(shí),則可以方便的在下拉列表中設(shè)置屬性的值。

  · 在運(yùn)行時(shí)為屬性初始化生成代碼的類(lèi)型轉(zhuǎn)換器;

  .NET Framework 提供了在設(shè)計(jì)時(shí)生成動(dòng)態(tài)屬性初始化代碼(此代碼在運(yùn)行時(shí)初始化屬性)的功能。開(kāi)發(fā)人員可以構(gòu)建一個(gè)產(chǎn)生基于構(gòu)造函數(shù)的初始化代碼的類(lèi)型轉(zhuǎn)換器。為了在運(yùn)行時(shí)配置類(lèi)型屬性,這些類(lèi)型轉(zhuǎn)換器可以使用在設(shè)計(jì)時(shí)設(shè)置的值來(lái)動(dòng)態(tài)生成構(gòu)造函數(shù)代碼。類(lèi)型轉(zhuǎn)換器實(shí)現(xiàn)邏輯以配置屬性的類(lèi)型和構(gòu)造函數(shù)的值。

  實(shí)現(xiàn)以上3種類(lèi)型轉(zhuǎn)換器都要求自定義類(lèi)型轉(zhuǎn)換器的類(lèi)必須繼承自System.ComponentModel.TypeConverter基類(lèi),或者TypeConverter類(lèi)的已有子類(lèi)。下面簡(jiǎn)單介紹一下TypeConverter及其子類(lèi)的基本情況。

  TypeConverter類(lèi)主要提供了一種將值的類(lèi)型轉(zhuǎn)換為其他類(lèi)型,以及訪問(wèn)標(biāo)準(zhǔn)值和子屬性的統(tǒng)一方法。該類(lèi)包括多個(gè)成員方法。對(duì)于創(chuàng)建自定義類(lèi)型轉(zhuǎn)換器而言,讀者應(yīng)了解以下幾個(gè)常見(jiàn)方法:

 ?。?)CanConvertFrom方法:返回該轉(zhuǎn)換器是否可以將一種類(lèi)型的對(duì)象轉(zhuǎn)換為此轉(zhuǎn)換器的類(lèi)型。

 ?。?)ConvertFrom方法:將給定值轉(zhuǎn)換為此轉(zhuǎn)換器的類(lèi)型。

 ?。?)CanConvertTo方法:返回此轉(zhuǎn)換器是否可將該對(duì)象轉(zhuǎn)換為指定的類(lèi)型。

 ?。?)ConvertTo方法:將給定值對(duì)象轉(zhuǎn)換為指定的類(lèi)型。

 ?。?)IsValid方法:返回給定值對(duì)象對(duì)于此類(lèi)型是否有效。

  (6)GetStandardValuesSupported方法:返回此對(duì)象是否支持可以從列表中選取的標(biāo)準(zhǔn)值集。

  (7)GetStandardValues方法:返回此類(lèi)型轉(zhuǎn)換器設(shè)計(jì)用于的數(shù)據(jù)類(lèi)型的標(biāo)準(zhǔn)值集合。

  TypeConverter類(lèi)是實(shí)現(xiàn)類(lèi)型轉(zhuǎn)換器的基礎(chǔ)。為了支持默認(rèn)類(lèi)型轉(zhuǎn)換功能,ASP.NET 2.0還對(duì)TypeConverter類(lèi)進(jìn)行了擴(kuò)展,其內(nèi)置了多個(gè)派生類(lèi)。例如,CharConverter、DateTimeConverter、ExpandableObjectConverter、EnumConverter等。它們?cè)谕瓿深?lèi)型轉(zhuǎn)換的同時(shí),還可以幫助開(kāi)發(fā)人員創(chuàng)建自定義類(lèi)型轉(zhuǎn)換器,例如,可創(chuàng)建繼承自ExpandableObjectConverter類(lèi)的類(lèi)型轉(zhuǎn)換器,該基類(lèi)提供了在可擴(kuò)展對(duì)象與其他各種表示形式之間實(shí)現(xiàn)轉(zhuǎn)換的類(lèi)型轉(zhuǎn)換器。這樣就可以簡(jiǎn)化(相對(duì)于從TypeConverter基類(lèi))創(chuàng)建類(lèi)型轉(zhuǎn)換器的過(guò)程。

  另外,在使用已有類(lèi)型轉(zhuǎn)換器過(guò)程要注意:無(wú)論何時(shí)都不要直接訪問(wèn)類(lèi)型轉(zhuǎn)換器。而應(yīng)通過(guò)使用TypeDescriptor調(diào)用適當(dāng)?shù)霓D(zhuǎn)換器。

  當(dāng)實(shí)現(xiàn)類(lèi)型轉(zhuǎn)換器之后,可以使用如下方法應(yīng)用類(lèi)型轉(zhuǎn)換器。

[TypeConverter(typeof(MyClassConverter))]
public class MyClass {
 // Insert code here.
}

  以上代碼顯示了類(lèi)型轉(zhuǎn)換器的應(yīng)用方法。其通知MyClass使用名為MyClassConverter的類(lèi)型轉(zhuǎn)換器。此示例假定已在其他位置實(shí)現(xiàn)了MyClassConverter。在應(yīng)用過(guò)程中需要注意,元數(shù)據(jù)屬性TypeConverter通常應(yīng)用于復(fù)雜屬性或數(shù)據(jù)成員,以將其與類(lèi)型轉(zhuǎn)換器關(guān)聯(lián)。如果將TypeConverter應(yīng)用于類(lèi)型,則不必將其再次應(yīng)用于該類(lèi)型的屬性或數(shù)據(jù)成員。

相關(guān)文章

  • asp.net使用JS+form表單Post和Get方式提交數(shù)據(jù)

    asp.net使用JS+form表單Post和Get方式提交數(shù)據(jù)

    今天小編就為大家分享一篇關(guān)于asp.net使用JS+form表單Post和Get方式提交數(shù)據(jù),小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2019-01-01
  • Ajax.net Sys未定義錯(cuò)誤解決辦法

    Ajax.net Sys未定義錯(cuò)誤解決辦法

    用Asp.net2.0開(kāi)發(fā)的系統(tǒng),使用了Ajax技術(shù),在本地沒(méi)有任何問(wèn)題!但是發(fā)布到Web托管服務(wù)器上后,系統(tǒng)總是出現(xiàn)“Sys 未定義”的錯(cuò)誤!
    2008-09-09
  • asp.net內(nèi)置對(duì)象 Response對(duì)象使用介紹

    asp.net內(nèi)置對(duì)象 Response對(duì)象使用介紹

    這篇文章主要介紹了asp.net內(nèi)置對(duì)象:Response對(duì)象使用介紹,對(duì)Response對(duì)象感興趣的小伙伴們可以參考一下
    2015-11-11
  • ASP.NET Web Page應(yīng)用深入探討

    ASP.NET Web Page應(yīng)用深入探討

    這些內(nèi)容是我在學(xué)習(xí)ASP.Net的時(shí)候?qū)age研究的一些心得,具體的細(xì)節(jié)沒(méi)有很詳細(xì)的探討,更多的內(nèi)容請(qǐng)大家參考MSDN,但是我舉了一些初學(xué)者常犯的錯(cuò)誤和出現(xiàn)錯(cuò)誤的原因,希望可以給大家?guī)?lái)啟發(fā)。
    2009-08-08
  • asp.net如何得到GRIDVIEW中某行某列值的方法

    asp.net如何得到GRIDVIEW中某行某列值的方法

    這篇文章介紹了獲得GRIDVIEW中某行某列值的方法具體步驟,有需要的朋友可以參考一下
    2013-07-07
  • .Net Core2.1 WebAPI新增Swagger插件詳解

    .Net Core2.1 WebAPI新增Swagger插件詳解

    這篇文章主要給大家介紹了關(guān)于.Net Core2.1 WebAPI新增Swagger插件的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2018-07-07
  • 在Code First模式中自動(dòng)創(chuàng)建Entity模型

    在Code First模式中自動(dòng)創(chuàng)建Entity模型

    這篇文章介紹了在Code First模式中自動(dòng)創(chuàng)建Entity模型的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-06-06
  • 如何在不同.net版本實(shí)現(xiàn)單點(diǎn)登錄

    如何在不同.net版本實(shí)現(xiàn)單點(diǎn)登錄

    經(jīng)過(guò)研究,重寫(xiě)實(shí)現(xiàn)了一個(gè)可以在不同.net版本中實(shí)現(xiàn)單點(diǎn)登錄的簡(jiǎn)單方法?,F(xiàn)在和大家分享一下,不足之處還望見(jiàn)諒
    2013-07-07
  • .Net中異步任務(wù)的取消和監(jiān)控的具體實(shí)現(xiàn)

    .Net中異步任務(wù)的取消和監(jiān)控的具體實(shí)現(xiàn)

    本文主要介紹了.Net中異步任務(wù)的取消和監(jiān)控的具體實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • ASP.NET Core WebApi中使用FluentValidation驗(yàn)證數(shù)據(jù)模型的方法

    ASP.NET Core WebApi中使用FluentValidation驗(yàn)證數(shù)據(jù)模型的方法

    這篇文章主要介紹了ASP.NET Core WebApi中使用FluentValidation驗(yàn)證數(shù)據(jù)模型的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2019-01-01

最新評(píng)論