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

首頁 > 編程 > C# > 正文

使用C#中的泛型提高代碼復用率

2023-05-05 19:01:39
字體:
來源:轉載
供稿:網友

關于泛型,在本站中已經有幾篇文章作了相關介紹,本文從代碼重用提高效率的角度再次探討了泛型的使用心得。具體思路是通過泛型將兩個相似的方法合并到一起,具體實現原理與過程如下:

  有兩個類:

  public class Dog

  {

  public string Name { get; set; }

  }

  public class Cat

  {

  public string Name { get; set; }

  }

  現在有一個需求,要求將Dog和Cat的名字打印出來,寫兩個方法,分別用于打印Dog和Cat的名字:

  //打印Dog的名字

  public static void PrintDogName(Dog dog)

  {

  Console.WriteLine(dog.Name);

  }

  //答應Cat的名字

  public static void PrintCatName(Cat cat)

  {

  Console.WriteLine(cat.Name);

  }

  需要完成打印名字的工作時,實例化Dog和Cat,再分別調用兩個方法來打印名字:

  static void Main(string[] args)

  {

  //實例化Dog

  Dog Spot = new Dog() { Name = "WangWang" };

  //實例化Cat

  Cat Persian = new Cat() { Name = "Mimi" };

  //打印Dog實例的Name

  PrintDogName(Spot);

  //打印Cat實例的Name

  PrintCatName(Persian);

  }

  在做codereview的時候,發現這兩個方法是如此的相似,只有處理的類型不一樣。在這個示例中可以這樣合并:

  //本示例的合并方法

  public static void PrintName(string name)

  {

  Console.WriteLine(name);

  }

  下面用泛型方法來將這兩個方法合并成一個方法,來提高代碼復用:

  public static void PrintName<T>(T t)

  {

  //打印的是Dog

  if (t is Dog)

  {

  Console.WriteLine((t as Dog).Name);

  return;

  }

  //打印的是Cat

  if (t is Cat)

  {

  Console.WriteLine((t as Cat).Name);

  return;

  }

  //打印的既不是Dog也不是Cat

  Console.WriteLine("This method only support Dog and Cat.");

  }

  這種方法是把方法合并成一個了,但總的代碼量沒有減少。只是把原來兩個方法里的代碼拿到一個方法里來了,后來又想了一種合并的方法,步驟如下:

  首先將Dog類和Cat類抽象出一個接口來:

  //包含名字屬性的接口

  interface IName

  {

  string Name { get; set; }

  }

  Dog和Cat類都要繼承這個接口:

  //Dog類繼承了IName接口

  public class Dog : IName

  {

  public string Name { get; set; }

  }

  //Cat類繼承了IName接口

  public class Cat:IName

  {

  public string Name { get; set; }

  }

  現在重寫這個泛型方法:

  //限制泛型必須實現IName接口

  public static void PrintName<T>(T t)where T:IName

  {

  Console.WriteLine(t.Name);

  }

  這樣方法體內的代碼就不用重復了,而且將來要打印任何繼承IName接口的名字了,代碼可擴展。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 刚察县| 保靖县| 喀什市| 仲巴县| 沅江市| 井冈山市| 高密市| 安西县| 樟树市| 西华县| 新沂市| 清水县| 卓尼县| 石景山区| 清丰县| 灌南县| 襄垣县| 东海县| 新余市| 同心县| 嵊州市| 河间市| 姜堰市| 固原市| 成都市| 四平市| 奉化市| 垫江县| 宁陵县| 方山县| 兴文县| 龙陵县| 冀州市| 绵竹市| 卢氏县| 十堰市| 荆州市| 搜索| 江油市| 浮梁县| 临泽县|