日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
C#類型轉(zhuǎn)換器的實現(xiàn)淺析

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

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

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

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

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

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

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

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

如果轉(zhuǎn)換的目標類型是實例描述器(InstanceDescriptor,它負責(zé)生成實例化的代碼),我們需要構(gòu)造一個實例描述器,構(gòu)造實例描述器的時候,我們要利用反射機制獲得Scope類的構(gòu)造器信息,并在new的時候傳入Scope實例的兩個屬性值。實例描述器會為我們生成這樣的代碼: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)能夠直接將實例描述器轉(zhuǎn)換為Scope類型,所以我們就沒有必要再寫代碼,我們只需要關(guān)注如何將String(在屬性瀏覽出現(xiàn)的屬性值的表達)類型的值轉(zhuǎn)換為Scope類型。沒有很復(fù)雜的轉(zhuǎn)換,只是將這個字符串以“,”分拆開,并串換為Int32類型,然后new一個Scope類的實例,將分拆后轉(zhuǎn)換的兩個整型值賦給Scope的實例,然后返回實例。在這段代碼里,我們要判斷一下用戶設(shè)定的屬性值是否有效。比如,如果用戶在Scope屬性那里輸入了“10200”,由于沒有輸入“,”,我們無法將屬性的值分拆為兩個字符串,也就無法進行下面的轉(zhuǎn)換,所以,我們要拋出一個異常,通知用戶重新輸入。

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


網(wǎng)站題目:C#類型轉(zhuǎn)換器的實現(xiàn)淺析
當(dāng)前URL:http://www.dlmjj.cn/article/dhceccd.html