C#泛型的使用案例
作者:Darren 发布时间:2023-10-01 23:24:00
标签:C#,泛型
有这样一个有关汽车的类。
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


猜你喜欢
- 布局中listview要覆盖标题栏 int mTouchSlop = ViewConfiguration.get(this).getScal
- 1 SQL语句的执行过程介绍MyBatis核心执行组件:2 SQL执行的入口分析2.1 为Mapper接口创建代理对象// 方式1:User
- 前台代码: <asp:Button ID="Button1" runat="server" T
- 随着互联网的发展,传统的HTTP协议已经很难满足Web应用日益复杂的需求了。近年来,随着HTML5的诞生,WebSocket协议被提出,它实
- 读取properties配置文件package com.easycrud.utils;import java.io.IOException;
- 本文实例为大家分享了Android实现旋转动画的具体代码,供大家参考,具体内容如下旋转动画(可加速、减速)1、准备工作首先需要有一个用于旋转
- Thread类相对于线程池中的线程,使用者有更多的控制权。该类允许创建前台线程,设置线程优先级等。Thread类的构造函数重载为接受Thre
- 本文实例讲述了Android编程创建桌面快捷方式的常用方法。分享给大家供大家参考,具体如下:Android在桌面上生成快捷方式有两种情况,一
- java随机验证码生成实现实例代码摘要: 在项目中有很多情况下都需要使用到随机验证码,这里提供一个java的随机验证码生成方案,可以指定难度
- 前言我个人觉得,中间件的部署与使用是非常难记忆的;也就是说,如果两次使用中间件的时间间隔比较长,那基本上等于要重新学习使用。所以,我觉得学习
- 一、前言最近接到一个任务,需要爬取五级行政区划的所有数据(大概71万条数据在),需要爬取的网站:行政区划 - 行政区划代码查询 发
- java 中二分法查找的应用实例二分查找的前提是:数组有序 注意:mid的动态变化,否则出错!!! 实例代码:publ
- Spring * 监测每个Controller或方法的执行时长首先写一个类(TestInterceptor)让他继承HandlerInter
- BroadcastReceiver不仅可以接收系统广播,也可接收自定义的广播 1.定义一个广播 * public class My
- 我们都知道,Android上的界面展示都是通过Activity实现的,Activity实在是太常用了,我相信大家都已经非常熟悉了,这里就不再
- NotificationManager 是状态栏通知的管理类,负责发通知、清除通知等操作。NotificationManager 是一个系统
- 先吐槽一下,现在的Bean Searcher操作手册的指引弱的可怜…对我这样的小白及其不友好话不多说直入主题1、首先肯
- 问题org.apache.ibatis.binding.BindingException: Invalid bound statement
- 本文实例讲述了C#实现自定义windows系统日志的方法。分享给大家供大家参考。具体实现方法如下:using System;using Sy
- 求两个正整数的最大公约数 思路:这是一个很基本的问题,最常见的就是两种方法,辗转