国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

C#利用范型與擴展方法重構代碼

2019-11-14 16:35:25
字體:
來源:轉載
供稿:網友

在一些C#代碼中常??梢钥吹?span id="iwvjtn8m0" class="Apple-converted-space"> 

java代碼  收藏代碼
  1. //An Simple Example By Ray Linn  
  2. class CarCollection :ICollection  
  3. {  
  4.     IList list;  
  5.       
  6.     public void Add(Car car)  
  7.     {  
  8.          list.Add(car);  
  9.     }  
  10.     .... function list for ICollection...  
  11.       
  12.     public  void listPRice()  
  13.     {  
  14.        foreach(Car car in list)  
  15.            System.Console.WriteLin(car.Price);  
  16.     }  
  17.     ......more specifical function list...  
  18. }  
  19.   
  20. class PetCollection :ICollection  
  21. {  
  22.     IList list;  
  23.   
  24.     public void Add(Pet pet)  
  25.     {  
  26.          list.Add(pet);  
  27.     }  
  28.     .... function list for ICollection...  
  29.       
  30.     public  void FeedPet()  
  31.     {  
  32.        foreach(Pet pet in list)  
  33.            System.Console.WriteLin(pet.Eating());  
  34.     }  
  35.     ......more specifical function list...  
  36. }  



這樣的代碼在很多Open Source項目中是很經??吹降?比如Cecil,其共同特點是:某種特定類型的Collection+該Collection特殊的操作,在一個項目中可能充斥著數十個類似的Collection,類似的代碼在Java中很難被重構,但是在C#中,卻可以借助擴展方法與范型進行代碼的精減。 

首先創建范型的Collection,該例子可以用List<T>來代替,但作為例子,我們假設該List<T>是特殊的(可能有一些delegate) 
Java代碼 
  

Java代碼  收藏代碼
  1. public CommonCollection<T>:ICollection<T>     
  2. {     
  3.    IList<T> list     
  4.     
  5.     .... function list for ICollection...     
  6. }    
  7.   
  8. public CommonCollection<T>:ICollection<T>  
  9. {  
  10.    IList<T> list  
  11.   
  12.     .... function list for ICollection...  
  13. }  



對于Car和Pet的特殊操作,我們通過擴展方法來實現 

Java代碼  收藏代碼
  1.     
  2.   
  3. public static class CarExt  
  4. {  
  5.     //Ext Function For CommonCollection<Car> by Ray Linn  
  6.     public static void listPrice(this CommonCollection<Car> collection)  
  7.     {  
  8.        foreach(Car car in collection)  
  9.            System.Console.WriteLin(car.Price);  
  10.     }  
  11.     ......more specifical function list...  
  12. }  
  13.   
  14. public static class PetExt  
  15. {  
  16.       //Ext Function For CommonCollection<Pet> by Ray Linn  
  17.     public static void FeedPet(this CommonCollection<Pet> collection)  
  18.     {  
  19.        foreach(Pet pet in list)  
  20.            System.Console.WriteLin(pet.Eating());  
  21.     }  
  22. }  



通過這樣的方式,我們就實現了重構,兩個Collection實現了求同存異。在我重構的Cecil之后,編譯后的Assemly大小減小了一半.


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 林口县| 岐山县| 湟中县| 琼海市| 阳东县| 兴山县| 宁波市| 涿鹿县| 什邡市| 长泰县| 治多县| 临江市| 如皋市| 霍林郭勒市| 木里| 遵化市| 滦南县| 翁源县| 武平县| 宜良县| 罗源县| 湟中县| 绥滨县| 师宗县| 离岛区| 光泽县| 建宁县| 新泰市| 仁寿县| 汉中市| 彭阳县| 岐山县| 邹平县| 日照市| 汉沽区| 陆良县| 龙州县| 隆子县| 精河县| 张家口市| 顺义区|