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

C#類型轉(zhuǎn)換器的實(shí)現(xiàn)淺析

開發(fā) 后端
C#類型轉(zhuǎn)換器的實(shí)現(xiàn)是如何辦到的呢?我們?cè)贑# WinForm控件開發(fā)中是怎么實(shí)現(xiàn)的呢?需要哪些方法呢?那么這里就向你介紹具體的實(shí)現(xiàn)過程以及實(shí)例。

C#類型轉(zhuǎn)換器的實(shí)現(xiàn)是如何的呢?具體的操作是什么呢?那么這里就向你介紹C#類型轉(zhuǎn)換器的實(shí)現(xiàn)需要重寫四個(gè)方法,下面我們來具體看看細(xì)節(jié)是如何操作的。

C#類型轉(zhuǎn)換器的實(shí)現(xiàn)所用重寫的方法:

◆CanConvertFrom()――根據(jù)類型參數(shù)進(jìn)行測(cè)試,判斷是否能從這個(gè)類型轉(zhuǎn)換成當(dāng)前類型,在本例中我們只提供轉(zhuǎn)換string和InstanceDescriptor類型的能力。

◆CanConvertTo()――根據(jù)類型參數(shù)進(jìn)行測(cè)試,判斷是否能從當(dāng)前類型轉(zhuǎn)換成指定的類型。

◆ConvertTo()――將參數(shù)value的值轉(zhuǎn)換為指定的類型。

◆ConvertFrom()――串換參數(shù)value,并返回但書類型的一個(gè)對(duì)象。

C#類型轉(zhuǎn)換器的實(shí)現(xiàn)實(shí)例:

  1. public override object ConvertTo(  
  2. ITypeDescriptorContext context,  
  3.  System.Globalization.CultureInfo culture,   
  4. object value, Type destinationType)  
  5. {  
  6. String result = "";  
  7. if (destinationType == typeof(String))  
  8. {  
  9. Scope scope = (Scope)value;  
  10. result = scope.Min.ToString()+"," + scope.Max.ToString();  
  11. return result;  
  12.  
  13. }  
  14.  
  15. if (destinationType == typeof(InstanceDescriptor))  
  16. {  
  17. ConstructorInfo ci =   
  18. typeof(Scope).GetConstructor(  
  19. new Type[] {typeof(Int32),typeof(Int32) });  
  20. Scope scope = (Scope)value;  
  21. return new InstanceDescriptor(  
  22. ci, new object[] { scope.Min,scope.Max });  
  23. }  
  24. return base.ConvertTo(context,   
  25. culture, value, destinationType);  
  26. }  

上面是ConvertTo的實(shí)現(xiàn),如果轉(zhuǎn)換的目標(biāo)類型是string,我將Scope的兩個(gè)屬性轉(zhuǎn)換成string類型,并且用一個(gè)“,”連接起來,這就是我們?cè)趯傩詾g覽器里看到的表現(xiàn)形式,如圖:

Scope的兩個(gè)屬性轉(zhuǎn)換成string類型 

如果轉(zhuǎn)換的目標(biāo)類型是實(shí)例描述器(InstanceDescriptor,它負(fù)責(zé)生成實(shí)例化的代碼),我們需要構(gòu)造一個(gè)實(shí)例描述器,構(gòu)造實(shí)例描述器的時(shí)候,我們要利用反射機(jī)制獲得Scope類的構(gòu)造器信息,并在new的時(shí)候傳入Scope實(shí)例的兩個(gè)屬性值。實(shí)例描述器會(huì)為我們生成這樣的代碼:this.myListControl1.Scope = new CustomControlSample.Scope(10, 200);在最后不要忘記調(diào)用 base.ConvertTo(context, culture, value, destinationType),你不需要處理的轉(zhuǎn)換類型,交給基類去做好了。

  1.  public override object ConvertFrom(  
  2. ITypeDescriptorContext context,   
  3. System.Globalization.CultureInfo culture,   
  4. object value)  
  5. {  
  6. if (value is string)  
  7. {  
  8. String[] v = ((String)value).Split(',');  
  9. if (v.GetLength(0) != 2)  
  10. {  
  11. throw new ArgumentException(  
  12. "Invalid parameter format");  
  13. }  
  14.  
  15. Scope csf = new Scope();  
  16. csf.Min = Convert.ToInt32(v[0]);  
  17. csf.Max = Convert.ToInt32(v[1]);  
  18. return csf;  
  19. }  
  20. return base.ConvertFrom(context, culture, value);  
  21. }  
  22. }  

上面是ConvertFrom的代碼,由于系統(tǒng)能夠直接將實(shí)例描述器轉(zhuǎn)換為Scope類型,所以我們就沒有必要再寫代碼,我們只需要關(guān)注如何將String(在屬性瀏覽出現(xiàn)的屬性值的表達(dá))類型的值轉(zhuǎn)換為Scope類型。沒有很復(fù)雜的轉(zhuǎn)換,只是將這個(gè)字符串以“,”分拆開,并串換為Int32類型,然后new一個(gè)Scope類的實(shí)例,將分拆后轉(zhuǎn)換的兩個(gè)整型值賦給Scope的實(shí)例,然后返回實(shí)例。在這段代碼里,我們要判斷一下用戶設(shè)定的屬性值是否有效。比如,如果用戶在Scope屬性那里輸入了“10200”,由于沒有輸入“,”,我們無法將屬性的值分拆為兩個(gè)字符串,也就無法進(jìn)行下面的轉(zhuǎn)換,所以,我們要拋出一個(gè)異常,通知用戶重新輸入。

C#類型轉(zhuǎn)換器的實(shí)現(xiàn)的相關(guān)內(nèi)容就向你介紹到這里,希望對(duì)你了解和學(xué)習(xí)C#類型轉(zhuǎn)換器的實(shí)現(xiàn)有所幫助。

【編輯推薦】

  1. C# Attribute的概念與使用淺析
  2. C# AttributeUsage的使用淺析
  3. 淺析Attribute在C# WinForm控件開發(fā)中的使用
  4. 淺談C#控件屬性串行化的實(shí)現(xiàn)
  5. C#實(shí)例詳解TypeConverterAttribute應(yīng)用
責(zé)任編輯:仲衡 來源: CSDN博客
相關(guān)推薦

2009-08-24 14:20:13

C# 強(qiáng)制類型轉(zhuǎn)換

2009-09-01 16:35:55

C#操作String數(shù)

2009-08-07 09:33:23

ASP.NET控件開發(fā)

2010-06-10 14:33:03

協(xié)議轉(zhuǎn)換器

2009-08-18 09:37:14

C#枚舉類型

2009-08-06 10:14:15

C#引用類型數(shù)組

2009-08-18 10:35:46

C#枚舉類型

2009-08-18 12:52:33

C#枚舉類型

2009-09-04 09:27:48

C#調(diào)用瀏覽器

2009-12-28 13:38:35

WPF類型轉(zhuǎn)換器

2009-09-07 09:36:29

C# DisposeDispose方法

2009-09-02 17:24:44

C#關(guān)機(jī)代碼

2009-08-24 14:51:25

C# 泛型泛型類型

2009-08-26 09:54:45

C#打印預(yù)覽C#打印

2009-08-18 13:00:59

C#枚舉類型

2009-08-26 15:04:35

C#轉(zhuǎn)換

2009-08-31 16:48:02

C#實(shí)現(xiàn)IDispos

2009-09-02 15:34:37

C#實(shí)現(xiàn)插件構(gòu)架

2009-09-01 18:29:24

C#實(shí)現(xiàn)多個(gè)接口

2010-06-17 23:31:35

協(xié)議轉(zhuǎn)換器
點(diǎn)贊
收藏

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