C#泛型的使用案例

作者:Darren 时间:2023-10-01 23:24:00 

有这样一个有关汽车的类。

public class Car
   {
       public int ID { get; set; }
       public string Make { get; set; }
   }

现在,在客户端创建一个Car的集合实例,再遍历。

static void Main(string[] args)
       {
           var car1 = new Car() {ID = 1, Make = "Ford"};
           var car2 = new Car() {ID = 2, Make = "Toyota"};
           var cars = new List<Car>(){car1,car2};
           foreach (var car in cars)
           {
               Console.WriteLine(car.Make);
           }
           Console.Read();
       }

现在,要为Car增加发动机。

不同的车系车型可能用不同的发动机。这些发动机应该有一个基类吧。

public class MotorBase
   {
       public int HorsePower { get; set; }
       public string Name { get; set; }
   }

比如,有2种型号的发动机,分别继承基类MotorBase。

public class V8 : MotorBase
   {
       public V8(string name)
       {
           HorsePower = 300;
           Name = name;
       }
   }
   public class V9 : MotorBase
   {
       public V9(string name)
       {
           HorsePower = 350;
           Name = name;
       }
   }

Car有可能用到V8发动机,也有可能V9发动机,这正是泛型登场的时候。

把Car修改成泛型类。

public class Car<T>
   {
       public int ID { get; set; }
       public string Make { get; set; }
       public T Motor { get; set; }
   }

这样,在创建Car<T>实例的时候,可以相对自如地选择V8或V9发动机。

static void Main(string[] args)
       {
           var v8Car1 = new Car<V8>() {ID = 1, Make = "Ford",Motor = new V8("v8发动机")};
           var v8Car2 = new Car<V8>() { ID = 2, Make = "Toyota", Motor = new V8("v8发动机") };
           var v8Cars = new List<Car<V8>>
           {
               v8Car1, v8Car2
           };
           foreach (var car in v8Cars)
           {
               Console.WriteLine("品牌:{0},发动机:{1}",car.Make, car.Motor.Name);
           }
           Console.Read();
       }

由此,当针对不同的类型有相同行为的时候,正是泛型登场的时候。

来源:https://www.cnblogs.com/darrenji/p/4517340.html

标签:C#,泛型
0
投稿

猜你喜欢

  • Java HashMap底层实现原理

    2023-10-31 19:55:34
  • javaweb图书商城设计之用户模块(1)

    2023-10-30 09:22:57
  • Java单例模式的8种写法(推荐)

    2023-01-06 14:23:27
  • Android禁止横屏竖屏切换的有效方法

    2023-05-05 10:56:16
  • Android App开发中HTTP扩展包OkHttp的入门使用指南

    2023-10-01 11:11:28
  • Dwr3.0纯注解(纯Java Code配置)配置与应用浅析一之零配置文件化

    2022-06-05 05:20:17
  • android实现注册登录程序

    2021-06-28 00:38:44
  • Java回调方法详解

    2022-09-25 08:33:54
  • Mybatis映射文件规则实例详解

    2022-04-22 03:08:14
  • SpringCloud项目中Feign组件添加请求头所遇到的坑及解决

    2023-04-28 03:46:58
  • Android编程实现下载时主界面与详细界面一致更新的方法

    2023-01-02 10:07:35
  • IntelliJ IDEA2020.1版本更新pom文件自动导包的方法

    2023-01-13 17:44:01
  • Android中简单的电话管理与短信管理App编写实例

    2021-10-11 13:45:50
  • C#程序执行时间长查询速度慢解决方案

    2023-10-31 08:49:05
  • java 字段值为null,不返回该字段的问题

    2023-07-13 10:32:34
  • ListView通用泛型适配器

    2022-06-30 11:52:04
  • 基于WPF实现验证码控件

    2021-08-15 21:44:36
  • Spring注解与P/C命名空间超详细解析

    2022-08-04 19:42:34
  • C#清除字符串内空格的方法

    2023-10-07 15:51:04
  • Android TV 3D卡片无限循环效果

    2022-03-26 04:06:48
  • asp之家 软件编程 m.aspxhome.com