成人免费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 10:35:46

C#枚舉類型

2009-08-18 12:52:33

C#枚舉類型

2009-08-06 10:14:15

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-09-02 15:34:37

C#實現插件構架

2009-08-31 16:48:02

C#實現IDispos

2009-08-26 15:04:35

C#轉換

2009-09-04 10:05:16

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

2009-12-28 13:38:35

WPF類型轉換器
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美11一13sex性hd | 一级a毛片 | 国产农村妇女精品一二区 | 亚洲成a人片 | 亚洲福利在线观看 | 99国产视频 | 亚洲精品久久视频 | 日韩欧美中文字幕在线观看 | 亚洲欧美在线视频 | 久久一区二区精品 | 999精品网 | 国产日韩一区二区 | 日韩看片 | 91影院| 自拍偷拍精品 | 在线成人免费视频 | 国产乱码精品一区二区三区中文 | 国产一区二区三区久久久久久久久 | 国产精品久久久久久久久大全 | 日本欧美视频 | 精品欧美一区二区三区久久久小说 | 国产成人一区二区三区 | 91精品国产综合久久久久久漫画 | 国产一二三区电影 | 日韩免费网站 | 成人网在线观看 | 国产精品视频在线免费观看 | 日韩伦理电影免费在线观看 | 91婷婷韩国欧美一区二区 | 欧美性生活一区二区三区 | 逼逼视频| 97超碰成人 | 久久这里只有精品首页 | 国产成人一区 | 黄色一级片视频 | 亚洲精品视频在线 | 国产一区二区三区免费 | 免费久 | 色综合av| 色综合视频在线 | av一区二区三区四区 |