C#学习系列之泛型类
由于长时间在代码中不使用泛型类,所以对泛型类的概念理解不是很深,最近在优化代码的时候遇到了问题,发现用泛型类非常好解决,所以自己又重新写了个列子加深理解。
泛型:主要解决的问题是当一个类中的逻辑被多个地方调用,但是传入的参数类型不同,此时使用泛型就能够解决复制方法的问题,让我们的代码逼格更高。
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 7 8 namespace Generic 9 { 10 public class Program 11 { 12 static void Main(string[] args) 13 { 14 Console.WriteLine("------此示例是演示泛型的使用--------"); 15 var a = new PersonA(); 16 a.name = "张三"; 17 var client = new Client<PersonA, PersonA>(a); 18 client.say(); 19 Console.WriteLine("----------------"); 20 client.run(); 21 Console.WriteLine("----------------"); 22 var b = new Dog(); 23 b.name = "小黑"; 24 var dog = new Client<Dog, Dog>(b); 25 dog.say(); 26 Console.WriteLine("----------------"); 27 dog.run(); 28 Console.ReadLine(); 29 } 30 } 31 32 public class Dog : Person, IPerson 33 { 34 35 public void Run() 36 { 37 Console.WriteLine(string.Format("{0}正在跑步...", this.name)); 38 } 39 40 public void Say() 41 { 42 Console.WriteLine(string.Format("{0}正在叫...", this.name)); 43 } 44 } 45 46 public class Person 47 { 48 public string name { get; set; } 49 public int age { get; set; } 50 51 } 52 53 public class PersonA : Person, IPerson 54 { 55 56 public void Run() 57 { 58 Console.WriteLine(string.Format("{0}正在跑步...", this.name)); 59 } 60 61 public void Say() 62 { 63 Console.WriteLine(string.Format("{0}正在说话...", this.name)); 64 } 65 } 66 67 public interface IPerson 68 { 69 void Run(); 70 void Say(); 71 } 72 73 public class Client<T, V> 74 where T : Person, IPerson 75 { 76 public Client(T t) 77 { 78 this.current = t; 79 } 80 public T current { get; set; } 81 82 public void say() 83 { 84 current.Say(); 85 } 86 87 public void run() 88 { 89 current.Run(); 90 } 91 } 92 93 }
转载于:https://www.cnblogs.com/manyiString/p/7120246.html
C#学习系列之泛型类相关推荐
- 数据结构学习系列文章合集
数据结构学习系列文章目录 前言 1.稀疏数组和队列 稀疏数组和二位数组的转换 数组队列的实现 环形队列的介绍与实现 2.链表 单链表的增.删.改.查 总结 前言 学习数据结构记录,作为自己的笔记,同时 ...
- OpenCV学习系列教程第五篇:测试和提高代码的效率
Opencv-Python学习系列教程第五篇 来自opencv-python官方学习文档,本人谨做翻译和注释,以及一些自己的理解 本文由作者翻译并进行代码验证,转载请注明出处~ 官方文档请参阅:htt ...
- Python学习系列(六)(模块)
Python学习系列(六)(模块) Python学习系列(五)(文件操作及其字典) 一,模块的基本介绍 1,import引入其他标准模块 标准库:Python标准安装包里的模块. 引入模块的几种方式: ...
- RabbitMQ学习系列二:.net 环境下 C#代码使用 RabbitMQ 消息队列
上一篇已经讲了Rabbitmq如何在Windows平台安装,不懂请移步:RabbitMQ学习系列一:windows下安装RabbitMQ服务 一.理论: .net环境下,C#代码调用RabbitMQ消 ...
- Python学习系列(五)(文件操作及其字典)
Python学习系列(五)(文件操作及其字典) Python学习系列(四)(列表及其函数) 一.文件操作 1,读文件 在以'r'读模式打开文件以后可以调用read函数一次性将文件内容全部读出 ...
- maven mybatis mysql_Java Web学习系列——Maven Web项目中集成使用Spring、MyBatis实现对MySQL的数据访问...
标签: 本篇内容还是建立在上一篇Java Web学习系列--Maven Web项目中集成使用Spring基础之上,对之前的Maven Web项目进行升级改造,实现对MySQL的数据访问. 添加依赖Ja ...
- Android学习系列(10)--App列表之拖拽ListView(上)
研究了很久的拖拽ListView的实现,受益良多,特此与尔共飨. 鉴于这部分内容网上的资料少而简陋,而具体的实现过程或许对大家才有帮助,为了详尽而不失真,我们一步一步分析,分成两篇文章. ...
- 机器人操作学习系列分享:模仿学习
2020-07-29 20:16:12 随着学会的队伍不断发展壮大,分支机构的发展愈发完善,丰富多彩的分支活动与学术分享也频频呈现.疫情期间,CAAI认知系统与信息处理专委会积极倡导学会"疫 ...
- Git学习系列之Git基本操作提交项目(图文详解)
前面博客 Git学习系列之Git基本操作克隆项目(图文详解) 然后可以 cd 切换到 LispGentleIntro 目录, 新增或者修改某些文件.这里只是模拟一下操作, 实际情况可能是 使用 Ecl ...
最新文章
- 基础中的基础。CANVAS step01
- 学会这几招设计思维让平面设计上一大台阶
- 【BUG记录】记一次游戏越来越卡的BUG
- md5碰撞Java_java现在MD5加密不安全了吗?
- MSP432P401R TI Drivers 库函数学习笔记(六)UART 串口
- Xcode中的-ObjC和-all_load
- linux登陆提示鉴定故障_5个最常见的Linux问题的故障排除提示
- 解决浏览器中点击input输入框时,placeholder的值不消失的方法
- 数字取证wireshark流量分析
- 【基础】603- 深入分析Session和Cookie
- 剑指Offer 27—二叉树的镜像
- JAVA GUI(图形用户界面)
- signature=cb30417dfa65eef445418827e0f0e0e6,以太坊P2P网络节点初始化
- python剪刀石头布小游戏_python小游戏(剪刀石头布)
- 医疗数字化:区块链或成最强辅助
- Task06:综合练习
- MySQL默认root密码查看与修改指南
- 爬取百度贴吧---迪丽热巴吧网页并保存爬取下来的网页在本地
- 揭秘场效应晶体管的使用诀窍,看完这里你就了然于胸
- 爬虫用的wkhtmltopdf windows安装测试——Html转pdf工具