一个例子来看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();}
由此,当针对不同的类型有相同行为的时候,正是泛型登场的时候。
一个例子来看C#泛型是如何登场的的更多相关文章
- 从一个例子中体会React的基本面
[起初的准备工作] npm init npm install --save react react-dom npm install --save-dev html-webpack-plugin web ...
- Erlang 程序引发共享内存 bug 的一个例子
虽然 Erlang 的广告说得非常好,functional.share-nothing.消息传递,blah blah 的,好像用 Erlang 写并发程序就高枕无忧了,但是由于 Erlang 信奉高度 ...
- 一个例子"入坑"布谷鸟算法(附完整py代码)
布谷鸟是比较新的启发式最优化算法,但其与传统的遗传算法,退火算法等相比,被证明收敛速度更快,计算效率更高! 文章目录 本文诞生的缘由 布谷鸟算法思想简介 更新位置的方式 莱维飞行 局部随机行走 抛出个 ...
- spring笔记--使用springAPI以及自定义类 实现AOP的一个例子
Spring的另一个重要思想是AOP,面向切面的编程,它提供了一种机制,可以在执行业务前后执行另外的代码,Servlet中的Filter就是一种AOP思想的体现,下面通过一个例子来感受一下. 假设我们 ...
- ReCap 360 photo照片建模技术的又一个例子
这是我做的又一个利用Autodesk ReCap 360 照片建模技术做的一个例子.你可以下载模型自己把玩,或者下载原始照片自己试一试. 拍摄工具: 小米手机 照片数量:约120张 后期处理工具: p ...
- 用thinkphp写的一个例子:抓取网站的内容并且保存到本地
我需要写这么一个例子,到电子课本网下载一本电子书. 电子课本网的电子书,是把书的每一页当成一个图片,然后一本书就是有很多张图片,我需要批量的进行下载图片操作. 下面是代码部分: public func ...
- 对Jena的简单理解和一个例子
本文简单介绍Jena(Jena 2.4),使用Protégé 3.1(不是最新版本)创建一个简单的生物(Creature)本体,然后参照Jena文档中的一个例子对本体进行简单的处理,输出本体中的Cla ...
- 使用flume的一个例子
新项目中需要使用到hadoop和vertica,使用flume把数据加载到hadoop中,我做了一个例子, 即监控一个sharefolder,如果里面有文件,则会文件load到hadoop. 开启Fl ...
- php部分--面向对象三大特性-封装(另加连续调用的一个例子)、继承(重写、重载的例子)、多态;
一.封装性: 目的:为了使类更加安全. 做法:1设置私有成员 2在类中建方法,访问私有成员 3在方法里边加控制(if) 私有成员访问的两种方法: 方法一:set(可写) get(可读)做方法(可读可写 ...
随机推荐
- usb的一些网址
一些关于usb的帖子.网址: usb gadget device g_ether.ko 做成usbnetwork http://bbs.csdn.net/topics/370120345 Linux ...
- linux c中select使用方法
1.select函数作为定时器使用 it_value.tv_sec = 0; it_value.tv_usec = 100000: select(1,NULL,NULL,NULL,& ...
- zabbix 3.2.2 server端(源码包)安装部署 (一)【转】
环境准备: 操作系统 CentOS 6.8 2.6.32-642.11.1.el6.x86_64 zabbix server 172.16.10.150 zabbix agent 172.16.10. ...
- Nginx报错:upstream timed out (110: Connection timed out)和client intended to send too large body【转】
nginx日志报错 2018/01/26 16:36:49 [error] 23327#0: *54953 upstream timed out (110: Connection timed out) ...
- Database Course Summary 001
0x01. 基本概念 SQL:Structured English Query Language 1. 数据 Data 数据(Data):描述事物的符号记录:数据内容是事物特性的反应或描述:数据是符号 ...
- wpf DataTemplate ColumnDefinition width equal
<Grid.ColumnDefinitions> <ColumnDefinition SharedSizeGroup="col1" /> <Colum ...
- java 嵌套接口
接口可以嵌套在其它类或接口中,可以拥有public和"包访问权限"两种可见性 作为一种新添加的方式,接口也可以实现为private 当实现某个接口时,并不需要实现嵌套在其内的任何接 ...
- Linix下修改mysql服务器编码
1. 找到mysql的配置文件,拷贝到etc目录下,第一步很重要 把/usr/share/doc/mysql-server-5.1.52/my-large.cnf 复制到 /etc/my.cnf 即用 ...
- 使用VSCode创建.NET Core 项目,添加类库间引用
注:网络上搜索到的关于VsCode创建调试.Net Core 项目的文章都比较老旧,不能完全参考使用,根据网络文章.微软官方文档的指导下,学习并整理此文档,但也大体和文档学习路线相似,主要为记录学习过 ...
- .NetCore利用Swagger生成 XML文档需要注意生成路径的地址
发布的时候如果用 release dotnet publish --configuration release dotnet publish 默认都是debug 会出现 XML丢失问题,其实可以看下工 ...