成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

C#類型轉換器的實現淺析

開發 后端
C#類型轉換器的實現是如何辦到的呢?我們在C# WinForm控件開發中是怎么實現的呢?需要哪些方法呢?那么這里就向你介紹具體的實現過程以及實例。

C#類型轉換器的實現是如何的呢?具體的操作是什么呢?那么這里就向你介紹C#類型轉換器的實現需要重寫四個方法,下面我們來具體看看細節是如何操作的。

C#類型轉換器的實現所用重寫的方法:

◆CanConvertFrom()――根據類型參數進行測試,判斷是否能從這個類型轉換成當前類型,在本例中我們只提供轉換string和InstanceDescriptor類型的能力。

◆CanConvertTo()――根據類型參數進行測試,判斷是否能從當前類型轉換成指定的類型。

◆ConvertTo()――將參數value的值轉換為指定的類型。

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

C#類型轉換器的實現實例:

  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的實現,如果轉換的目標類型是string,我將Scope的兩個屬性轉換成string類型,并且用一個“,”連接起來,這就是我們在屬性瀏覽器里看到的表現形式,如圖:

Scope的兩個屬性轉換成string類型 

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

  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的代碼,由于系統能夠直接將實例描述器轉換為Scope類型,所以我們就沒有必要再寫代碼,我們只需要關注如何將String(在屬性瀏覽出現的屬性值的表達)類型的值轉換為Scope類型。沒有很復雜的轉換,只是將這個字符串以“,”分拆開,并串換為Int32類型,然后new一個Scope類的實例,將分拆后轉換的兩個整型值賦給Scope的實例,然后返回實例。在這段代碼里,我們要判斷一下用戶設定的屬性值是否有效。比如,如果用戶在Scope屬性那里輸入了“10200”,由于沒有輸入“,”,我們無法將屬性的值分拆為兩個字符串,也就無法進行下面的轉換,所以,我們要拋出一個異常,通知用戶重新輸入。

C#類型轉換器的實現的相關內容就向你介紹到這里,希望對你了解和學習C#類型轉換器的實現有所幫助。

【編輯推薦】

  1. C# Attribute的概念與使用淺析
  2. C# AttributeUsage的使用淺析
  3. 淺析Attribute在C# WinForm控件開發中的使用
  4. 淺談C#控件屬性串行化的實現
  5. C#實例詳解TypeConverterAttribute應用
責任編輯:仲衡 來源: CSDN博客
相關推薦

2009-08-24 14:20:13

C# 強制類型轉換

2009-09-01 16:35:55

C#操作String數

2009-08-07 09:33:23

ASP.NET控件開發

2010-06-10 14:33:03

協議轉換器

2009-08-18 09:37:14

C#枚舉類型

2009-08-18 12:52:33

C#枚舉類型

2009-08-06 10:14:15

C#引用類型數組

2009-08-18 10:35:46

C#枚舉類型

2009-09-04 09:27:48

C#調用瀏覽器

2009-09-02 17:24:44

C#關機代碼

2009-09-07 09:36:29

C# DisposeDispose方法

2009-08-26 09:54:45

C#打印預覽C#打印

2009-08-18 13:00:59

C#枚舉類型

2009-08-24 14:51:25

C# 泛型泛型類型

2009-09-01 18:29:24

C#實現多個接口

2009-08-26 15:04:35

C#轉換

2009-09-02 15:34:37

C#實現插件構架

2009-08-31 16:48:02

C#實現IDispos

2009-09-04 10:05:16

C#調用瀏覽器瀏覽器的原理

2009-12-28 13:38:35

WPF類型轉換器
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 天堂成人国产精品一区 | 欧美11一13sex性hd | 欧美涩涩网| 国产高清视频 | 亚洲成av人影片在线观看 | 日韩免费在线 | 欧美精品一区二区三区在线播放 | 91成人在线视频 | 粉嫩一区二区三区国产精品 | 中国一级毛片免费 | 狠狠干影院| a在线视频 | 亚洲精品女优 | 成人在线小视频 | 2018国产大陆天天弄 | 日本精品一区二区三区视频 | 美女日批免费视频 | 香蕉大人久久国产成人av | 日韩欧美三级电影在线观看 | 国产视频二区在线观看 | 日韩一区三区 | 久久久久久毛片免费观看 | 男人的天堂久久 | 日韩欧美不卡 | 欧美精品啪啪 | 成人影院一区二区三区 | www在线视频 | 精品成人一区二区 | 欧美精品电影一区 | 欧美理论片在线 | 91色在线视频 | 亚洲激情在线观看 | 欧美精品在线观看 | 免费观看黄色片视频 | 亚洲va欧美va人人爽午夜 | 婷婷综合| 国产a视频| 国产精品区二区三区日本 | 欧美激情欧美激情在线五月 | 久久综合伊人一区二区三 | 成人国产精品 |