ASP.NET2.0服務(wù)器控件之類型轉(zhuǎn)換器
類型轉(zhuǎn)換器是實現(xiàn)自定義服務(wù)器控件屬性過程中比較重要的內(nèi)容。本文將對類型轉(zhuǎn)換器的基本概念和實現(xiàn)方法進行介紹。
1. 類型轉(zhuǎn)換器基本概念
類型轉(zhuǎn)換器是自定義服務(wù)器控件的輔助性功能實現(xiàn)。它主要用于執(zhí)行從字符串表示形式到指定類型之間的雙向轉(zhuǎn)換。例如,以文本形式表示屬性值,將用戶輸入的文本轉(zhuǎn)換為相應(yīng)數(shù)據(jù)類型等等,都應(yīng)用了類型轉(zhuǎn)換器。
對于多數(shù)基本數(shù)據(jù)類型(如Int32、Bool、Char、String、枚舉類型等),.net框架已經(jīng)為它們提供了默認的類型轉(zhuǎn)換器,這些類型轉(zhuǎn)換器完成從字符串到相關(guān)值的轉(zhuǎn)換并執(zhí)行驗證檢查的功能。默認的類型轉(zhuǎn)換器派生自System.ComponentModel.TypeConverter類,名為TypeConverterNameConverter。例如,當開發(fā)人員在*.ASPx文件中設(shè)置服務(wù)器控件屬性時會發(fā)現(xiàn),某些屬性值為基本類型,即Bool、Char、Enum、Int等,但是,一律被設(shè)置為String類型,這就牽扯到一個類型轉(zhuǎn)換的問題。例如,屬性Height="150px",屬性值"150px"在設(shè)置時是String類型,而這里的屬性值應(yīng)當作為Unit類型,那么所面臨的問題就是必須要求頁面編譯器將字符串"150px"轉(zhuǎn)換為Unit類型。通常情況下,對于屬性值為基本類型的屬性,頁面編譯器將自動應(yīng)用相關(guān)的類型轉(zhuǎn)換器完成轉(zhuǎn)換工作。在剛才的例子中,頁面編譯器將自動調(diào)用類型轉(zhuǎn)換器System.Web.UI.WebControls.UnitConverter完成String類型與Unit類型之間的相互轉(zhuǎn)換。
然而,上面的方法只能解決少數(shù)比較簡單的類型轉(zhuǎn)換問題,并且在多數(shù)情況下,相關(guān)的類型轉(zhuǎn)換過程都是默認自動完成的。當默認類型轉(zhuǎn)換器無法滿足需要時,例如,對于復(fù)雜屬性的情況,是沒有關(guān)聯(lián)的默認類型轉(zhuǎn)換器時,則可以通過實現(xiàn)自定義類型轉(zhuǎn)換器來實現(xiàn)。
自定義類型轉(zhuǎn)換器是本文的重點內(nèi)容。按照自定義類型轉(zhuǎn)換器的功能分類,可以將自定義類型轉(zhuǎn)換器分為3種:
· 值翻譯的類型轉(zhuǎn)換器;
這種類型轉(zhuǎn)換器最為常見,它主要完成從字符串到值得轉(zhuǎn)換,或用于在設(shè)計時和運行時進行數(shù)據(jù)類型之間的雙向翻譯。例如,實現(xiàn)從String類型轉(zhuǎn)換為表示在二維平面中定義點的、整數(shù)X和Y坐標的有序?qū)oint類型,或者從Point類型轉(zhuǎn)換為String類型。此處的String類型與Ponit類型之間的雙向轉(zhuǎn)換,則需要實現(xiàn)一個值翻譯的類型轉(zhuǎn)換器。
· 向?qū)傩源翱谔峁藴手盗斜淼念愋娃D(zhuǎn)換器;
在Visual Studio 2005中包括控件屬性窗口。類型轉(zhuǎn)換器可以為屬性窗口中控件的類型提供一個值列表。當開發(fā)人員單擊值列表時,則可以方便的在下拉列表中設(shè)置屬性的值。
· 在運行時為屬性初始化生成代碼的類型轉(zhuǎn)換器;
.NET Framework 提供了在設(shè)計時生成動態(tài)屬性初始化代碼(此代碼在運行時初始化屬性)的功能。開發(fā)人員可以構(gòu)建一個產(chǎn)生基于構(gòu)造函數(shù)的初始化代碼的類型轉(zhuǎn)換器。為了在運行時配置類型屬性,這些類型轉(zhuǎn)換器可以使用在設(shè)計時設(shè)置的值來動態(tài)生成構(gòu)造函數(shù)代碼。類型轉(zhuǎn)換器實現(xiàn)邏輯以配置屬性的類型和構(gòu)造函數(shù)的值。
實現(xiàn)以上3種類型轉(zhuǎn)換器都要求自定義類型轉(zhuǎn)換器的類必須繼承自System.ComponentModel.TypeConverter基類,或者TypeConverter類的已有子類。下面簡單介紹一下TypeConverter及其子類的基本情況。
TypeConverter類主要提供了一種將值的類型轉(zhuǎn)換為其他類型,以及訪問標準值和子屬性的統(tǒng)一方法。該類包括多個成員方法。對于創(chuàng)建自定義類型轉(zhuǎn)換器而言,讀者應(yīng)了解以下幾個常見方法:
(1)CanConvertFrom方法:返回該轉(zhuǎn)換器是否可以將一種類型的對象轉(zhuǎn)換為此轉(zhuǎn)換器的類型。
?。?)ConvertFrom方法:將給定值轉(zhuǎn)換為此轉(zhuǎn)換器的類型。
?。?)CanConvertTo方法:返回此轉(zhuǎn)換器是否可將該對象轉(zhuǎn)換為指定的類型。
?。?)ConvertTo方法:將給定值對象轉(zhuǎn)換為指定的類型。
?。?)IsValid方法:返回給定值對象對于此類型是否有效。
?。?)GetStandardValuesSupported方法:返回此對象是否支持可以從列表中選取的標準值集。
(7)GetStandardValues方法:返回此類型轉(zhuǎn)換器設(shè)計用于的數(shù)據(jù)類型的標準值集合。
TypeConverter類是實現(xiàn)類型轉(zhuǎn)換器的基礎(chǔ)。為了支持默認類型轉(zhuǎn)換功能,ASP.NET 2.0還對TypeConverter類進行了擴展,其內(nèi)置了多個派生類。例如,CharConverter、DateTimeConverter、ExpandableObjectConverter、EnumConverter等。它們在完成類型轉(zhuǎn)換的同時,還可以幫助開發(fā)人員創(chuàng)建自定義類型轉(zhuǎn)換器,例如,可創(chuàng)建繼承自ExpandableObjectConverter類的類型轉(zhuǎn)換器,該基類提供了在可擴展對象與其他各種表示形式之間實現(xiàn)轉(zhuǎn)換的類型轉(zhuǎn)換器。這樣就可以簡化(相對于從TypeConverter基類)創(chuàng)建類型轉(zhuǎn)換器的過程。
另外,在使用已有類型轉(zhuǎn)換器過程要注意:無論何時都不要直接訪問類型轉(zhuǎn)換器。而應(yīng)通過使用TypeDescriptor調(diào)用適當?shù)霓D(zhuǎn)換器。
當實現(xiàn)類型轉(zhuǎn)換器之后,可以使用如下方法應(yīng)用類型轉(zhuǎn)換器。 [TypeConverter(typeof(MyClassConverter))]
public class MyClass {
// Insert code here.
}
以上代碼顯示了類型轉(zhuǎn)換器的應(yīng)用方法。其通知MyClass使用名為MyClassConverter的類型轉(zhuǎn)換器。此示例假定已在其他位置實現(xiàn)了MyClassConverter。在應(yīng)用過程中需要注意,元數(shù)據(jù)屬性TypeConverter通常應(yīng)用于復(fù)雜屬性或數(shù)據(jù)成員,以將其與類型轉(zhuǎn)換器關(guān)聯(lián)。如果將TypeConverter應(yīng)用于類型,則不必將其再次應(yīng)用于該類型的屬性或數(shù)據(jù)成員。
相關(guān)文章
asp.net使用JS+form表單Post和Get方式提交數(shù)據(jù)
今天小編就為大家分享一篇關(guān)于asp.net使用JS+form表單Post和Get方式提交數(shù)據(jù),小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2019-01-01asp.net內(nèi)置對象 Response對象使用介紹
這篇文章主要介紹了asp.net內(nèi)置對象:Response對象使用介紹,對Response對象感興趣的小伙伴們可以參考一下2015-11-11.Net Core2.1 WebAPI新增Swagger插件詳解
這篇文章主要給大家介紹了關(guān)于.Net Core2.1 WebAPI新增Swagger插件的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2018-07-07在Code First模式中自動創(chuàng)建Entity模型
這篇文章介紹了在Code First模式中自動創(chuàng)建Entity模型的方法,文中通過示例代碼介紹的非常詳細。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-06-06.Net中異步任務(wù)的取消和監(jiān)控的具體實現(xiàn)
本文主要介紹了.Net中異步任務(wù)的取消和監(jiān)控的具體實現(xiàn),文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-09-09ASP.NET Core WebApi中使用FluentValidation驗證數(shù)據(jù)模型的方法
這篇文章主要介紹了ASP.NET Core WebApi中使用FluentValidation驗證數(shù)據(jù)模型的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2019-01-01