由于长时间在代码中不使用泛型类,所以对泛型类的概念理解不是很深,最近在优化代码的时候遇到了问题,发现用泛型类非常好解决,所以自己又重新写了个列子加深理解。

  泛型:主要解决的问题是当一个类中的逻辑被多个地方调用,但是传入的参数类型不同,此时使用泛型就能够解决复制方法的问题,让我们的代码逼格更高。

 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. 数据结构学习系列文章合集

    数据结构学习系列文章目录 前言 1.稀疏数组和队列 稀疏数组和二位数组的转换 数组队列的实现 环形队列的介绍与实现 2.链表 单链表的增.删.改.查 总结 前言 学习数据结构记录,作为自己的笔记,同时 ...

  2. OpenCV学习系列教程第五篇:测试和提高代码的效率

    Opencv-Python学习系列教程第五篇 来自opencv-python官方学习文档,本人谨做翻译和注释,以及一些自己的理解 本文由作者翻译并进行代码验证,转载请注明出处~ 官方文档请参阅:htt ...

  3. Python学习系列(六)(模块)

    Python学习系列(六)(模块) Python学习系列(五)(文件操作及其字典) 一,模块的基本介绍 1,import引入其他标准模块 标准库:Python标准安装包里的模块. 引入模块的几种方式: ...

  4. RabbitMQ学习系列二:.net 环境下 C#代码使用 RabbitMQ 消息队列

    上一篇已经讲了Rabbitmq如何在Windows平台安装,不懂请移步:RabbitMQ学习系列一:windows下安装RabbitMQ服务 一.理论: .net环境下,C#代码调用RabbitMQ消 ...

  5. Python学习系列(五)(文件操作及其字典)

    Python学习系列(五)(文件操作及其字典) Python学习系列(四)(列表及其函数) 一.文件操作 1,读文件      在以'r'读模式打开文件以后可以调用read函数一次性将文件内容全部读出 ...

  6. maven mybatis mysql_Java Web学习系列——Maven Web项目中集成使用Spring、MyBatis实现对MySQL的数据访问...

    标签: 本篇内容还是建立在上一篇Java Web学习系列--Maven Web项目中集成使用Spring基础之上,对之前的Maven Web项目进行升级改造,实现对MySQL的数据访问. 添加依赖Ja ...

  7. Android学习系列(10)--App列表之拖拽ListView(上)

    研究了很久的拖拽ListView的实现,受益良多,特此与尔共飨.       鉴于这部分内容网上的资料少而简陋,而具体的实现过程或许对大家才有帮助,为了详尽而不失真,我们一步一步分析,分成两篇文章. ...

  8. 机器人操作学习系列分享:模仿学习

    2020-07-29 20:16:12 随着学会的队伍不断发展壮大,分支机构的发展愈发完善,丰富多彩的分支活动与学术分享也频频呈现.疫情期间,CAAI认知系统与信息处理专委会积极倡导学会"疫 ...

  9. Git学习系列之Git基本操作提交项目(图文详解)

    前面博客 Git学习系列之Git基本操作克隆项目(图文详解) 然后可以 cd 切换到 LispGentleIntro 目录, 新增或者修改某些文件.这里只是模拟一下操作, 实际情况可能是 使用 Ecl ...

最新文章

  1. 基础中的基础。CANVAS step01
  2. 学会这几招设计思维让平面设计上一大台阶
  3. 【BUG记录】记一次游戏越来越卡的BUG
  4. md5碰撞Java_java现在MD5加密不安全了吗?
  5. MSP432P401R TI Drivers 库函数学习笔记(六)UART 串口
  6. Xcode中的-ObjC和-all_load
  7. linux登陆提示鉴定故障_5个最常见的Linux问题的故障排除提示
  8. 解决浏览器中点击input输入框时,placeholder的值不消失的方法
  9. 数字取证wireshark流量分析
  10. 【基础】603- 深入分析Session和Cookie
  11. 剑指Offer 27—二叉树的镜像
  12. JAVA GUI(图形用户界面)
  13. signature=cb30417dfa65eef445418827e0f0e0e6,以太坊P2P网络节点初始化
  14. python剪刀石头布小游戏_python小游戏(剪刀石头布)
  15. 医疗数字化:区块链或成最强辅助
  16. Task06:综合练习
  17. MySQL默认root密码查看与修改指南
  18. 爬取百度贴吧---迪丽热巴吧网页并保存爬取下来的网页在本地
  19. 揭秘场效应晶体管的使用诀窍,看完这里你就了然于胸
  20. 爬虫用的wkhtmltopdf windows安装测试——Html转pdf工具

热门文章

  1. Lambda表达式和表达式树
  2. 【分块答案】【最小割】bzoj1532 [POI2005]Kos-Dicing
  3. 数据库的几种联结,union,union all ,inner jion ,left jion,right jion ,cross jion
  4. ansible-playbook剧本使用配置
  5. 影像采集-拍照 (用自己的插件 )简单逻辑
  6. SQLSERVER的三种备份模式
  7. 重建DC的DNS区域
  8. 个人信息安全 不能止于“打补丁”
  9. Hadoop高速入门
  10. JS设置cookie、读取cookie、删除cookie