国产探花免费观看_亚洲丰满少妇自慰呻吟_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接口的名字了,代碼可擴展。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 宜阳县| 盐津县| 定边县| 舟曲县| 体育| 乾安县| 太仆寺旗| 安塞县| 四川省| 讷河市| 永宁县| 松阳县| 湘潭县| 元氏县| 十堰市| 河津市| 齐齐哈尔市| 桂阳县| 潮安县| 灵台县| 湖口县| 泰州市| 泸溪县| 阜城县| 壤塘县| 中山市| 博湖县| 九龙坡区| 桂东县| 文安县| 兴业县| 周至县| 抚顺市| 平湖市| 枣阳市| 长岛县| 阳春市| 大港区| 大新县| 屏东市| 宜章县|