C#语言入门详解(刘铁锰)---泛型
C#语言入门详解(刘铁锰)视频教程:https://www.bilibili.com/video/BV1wx411K7rb
IDE:VS2019
.NET Core 3.1
1.泛型类
实例代码:
using System;namespace 泛型
{class Program{static void Main(string[] args){Console.WriteLine("-------------test-------------");Apple ap = new Apple("red");Book bk = new Book("C#入门详解");Box<Apple> apbox = new Box<Apple>(ap);Console.WriteLine( apbox.Cargo.Color);Box<Book> bkbox = new Box<Book>(bk);Console.WriteLine(bkbox.Cargo.Name);Console.WriteLine("-------------Done-------------");}}class Apple //被包装的物品类{private string _color;public string Color { get => _color; set => _color = value; }public Apple(string color){this.Color = color; } }class Book //被包装的物品类{private string _name;public string Name{get { return _name; }set { _name = value; }}public Book(string name){this.Name = name;}}class Box<TCargo> //包装盒类{private TCargo _cargo;public TCargo Cargo { get => _cargo; set => _cargo = value; }public Box(TCargo cargo){this.Cargo = cargo; }}
}
运行结果:
-------------test-------------
red
C#入门详解
-------------Done-------------
2.泛型方法
实例代码:
using System;
using System.Collections.Generic;
namespace 泛型示例
{class Program{static void Main(string[] args){Console.WriteLine("-----------test-----------");IDictionary<int, string> dic = new Dictionary<int, string>();dic[1] = "赵1";dic[2] = "赵2";Console.WriteLine($"#1, {dic[1]}");Console.WriteLine($"#2, {dic[2]}");IList<int> list = new List<int>();//使用泛型方法,避免方法成员膨胀,int[] a = { 1, 2, 3, 4, 5 };int[] b = { 1, 2, 3, 4, 5, 6 };double[] a1 = { 1.1, 2.2, 3.3, 4.4, 5.5 };double[] b1 = { 1.1, 2.2, 3.3, 4.4, 5.5, 6.6 };//int[] res1 = Zip<int>(a, b); //调用方式1//double[] res2 = Zip<double>(a1, b1);var res1 = Zip(a, b);//调用方式2var res2 = Zip(a1, b1);Console.WriteLine(string.Join(',',res1)); //打印方法1Console.WriteLine(string.Join(',', res2)); //打印方法1//foreach (var item in res1) //打印方法2//{// Console.WriteLine(item);//}//foreach (var item in res2) //打印方法2//{// Console.WriteLine(item);//}Console.WriteLine("-----------Done-----------");}//泛型方法static T[] Zip<T>(T[] a, T[] b){T[] zipped = new T[a.Length + b.Length];int ai = 0;int bi = 0;int zi = 0;do{if (ai<a.Length){zipped[zi++] = a[ai++];}if (bi<b.Length){zipped[zi++] = b[bi++];}} while (ai<a.Length || bi<b.Length);return zipped;}}
}
运行结果:
-----------test-----------
#1, 赵1
#2, 赵2
1,1,2,2,3,3,4,4,5,5,6
1.1,1.1,2.2,2.2,3.3,3.3,4.4,4.4,5.5,5.5,6.6
-----------Done-----------
3.泛型接口
实例代码:
using System;namespace 泛型接口
{class Program{static void Main(string[] args){Console.WriteLine("-----------test-----------");Student<int> student = new Student<int>(001, "朱元璋");Console.WriteLine($"name: {student.Name}, id: {student.ID}");Console.WriteLine("-----------Done-----------");}}interface IUnique<TId>{public TId ID { get; set; }}//实现接口时不特化,Student<TID>为泛型类class Student<TID> : IUnique<TID>{public TID ID { get ; set ; }public string Name { get; set; }public Student(TID id, string name){this.ID = id;this.Name = name;}}//实现接口时特化,Student为非泛型类class Student1: IUnique<ulong>{public ulong ID { get; set; }public string Name { get; set; }public Student1(ulong id, string name){this.ID = id;this.Name = name;}}}
运行结果:
-----------test-----------
name: 朱元璋, id: 1
-----------Done-----------
4.泛型委托
实例代码:
using System;namespace 泛型委托
{class Program{static void Main(string[] args){Console.WriteLine("-------------test-------------");//泛型委托ActionAction action1 = new Action(SayHello);action1(); //调用方法1action1.Invoke();//调用方法2//泛型委托Action<>Action<string> action2 = new Action<string>(Say);Action<int, int> action3 = new Action<int, int>(Multi);action2.Invoke("Action<string>");action3.Invoke(2,2);//Func<>Func<int, int, int> func1 = new Func<int, int, int>(Add);Func<double, double, double> func2 = new Func<double, double, double>(Div);Console.WriteLine( func1.Invoke(1, 2));Console.WriteLine(func2.Invoke(100.1, 200.2));//lamda表达式Func<int, int ,int> funclamda = (int a, int b) => { return a + b; }; //(a, b) => { return a + b; };Console.WriteLine(funclamda.Invoke(100, 200));Console.WriteLine("-------------Done-------------");}//无返回值,无参数的方法static void SayHello(){Console.WriteLine("i am a action");}//无返回值,有参数的方法static void Say(string str){Console.WriteLine(str);}static void Multi(int a, int b){Console.WriteLine(a * b);}//有返回值,有参数的方法static int Add(int a, int b){return a + b;}static double Div(double a, double b){return a / b;}}}
运行结果:
-------------test-------------
i am a action
i am a action
Action<string>
4
3
0.5
300
-------------Done-------------
5.partial类
现代.NET编程的基石之一,平时直接用到的场景不多,后台默默奉献!"不同的部分允许用不同的编程语言编写,例如WPF。
6.枚举(enum)
实例代码:
using System;namespace Enum
{class Program{static void Main(string[] args){Console.WriteLine("-------------test-------------");Person employee = new Person(0100, "996工贼", ELevel.Employee);Person boss = new Person(0002, "2号老板", ELevel.Boss);Person bigboss = new Person(0001, "1号老板", ELevel.BigBoss);employee.Skill = ESkill.Csharp | ESkill.JavaScript | ESkill.Python;boss.Skill = ESkill.Teach | ESkill.Comminication;Console.WriteLine(employee.GetInfo());Console.WriteLine(boss.GetInfo());Console.WriteLine("-------------Done-------------");}}class Person{public int ID { get; set; }public string Name { get; set; }public ELevel Level { get; set; }public ESkill Skill { get; set; }public Person(int id, string name, ELevel level){this.ID = id;this.Name = name;this.Level = level;}public string GetInfo(){string str = $"ID: {this.ID.ToString("D4")}, \r\n"+ $"Name: {this.Name}, \r\n"+ $"Level: {this.Level},\r\n" ;for (int i = 0; i < 10; i++){ESkill temp = (ESkill)(int)Math.Pow(2, i);if ( (this.Skill & temp) == temp) //按位取与,结果为真则表示拥有这项技能{str += $"Skill: {temp},\r\n";}}return str;}}enum ELevel{Employee=100,Manager,Boss,BigBoss,}enum ESkill{//每个成员对应的数字为2的n次方,n从0开始,依次加1Csharp = 1,Java = 2,JavaScript = 4,Python = 8,CPlusPlus = 16,C = 32,Teach = 64,Comminication = 128, }
}
运行结果:
-------------test-------------
ID: 0100,
Name: 996工贼,
Level: Employee,
Skill: Csharp,
Skill: JavaScript,
Skill: Python,ID: 0002,
Name: 2号老板,
Level: Boss,
Skill: Teach,
Skill: Comminication,-------------Done-------------
7.结构体
实例代码:
using System;namespace Struct
{class Program{static void Main(string[] args){Console.WriteLine("---------------test---------------");Student st1 = new Student(1, "hodor");st1.ShowInfo();Student st2 = st1;st2.ShowInfo();st2.Name = "Snow";st2.ID = 2;st2.ShowInfo();st1.ShowInfo(); //结构体为值类型,st2是将st1的值复制了一份,改变st2并不会影响st1Console.WriteLine("---------------Done---------------");}}struct Student : IShowInfo{public int ID { get; set; }public string Name { get; set; }public Student(int id, string name)//结构体显式声明构造函,参数必须非空{this.ID = id;this.Name = name;}public void ShowInfo() //实现接口IShowInfo{Console.WriteLine($"ID: {this.ID}, Name: {this.Name}");}}interface IShowInfo //打印自身信息的接口{ void ShowInfo(); }
}
运行结果:
---------------test---------------
ID: 1, Name: hodor
ID: 1, Name: hodor
ID: 2, Name: Snow
ID: 1, Name: hodor
---------------Done---------------
C#语言入门详解(刘铁锰)---泛型相关推荐
- C#语言入门详解笔记(5)—P10、P11、P12 操作符详解_1_2_3
C#语言入门详解_哔哩哔哩_bilibiliC#语言入门详解搬运,随youtube上进度更新.刘老师的C#视频教程到30集就告一段落了,感谢刘老师在这5年间的付出.能上youtube的同学可以去刘老师 ...
- C#语言入门详解笔记(9)—P19 委托详解
C#语言入门详解_哔哩哔哩_bilibiliC#语言入门详解搬运,随youtube上进度更新.刘老师的C#视频教程到30集就告一段落了,感谢刘老师在这5年间的付出.能上youtube的同学可以去刘老师 ...
- python语言编程基础-Python语言入门详解!快速学成Python!
原标题:Python语言入门详解!快速学成Python! 很多技能是被职场所需要的,但很可惜... 这些技能在大学中并学习不到. 大学和职场现实存在的横沟对大部分同学来说难以跨越或碰得头破血流... ...
- python语言入门m-Python语言入门详解!快速学成Python!
今日主题 "Python语言入门详解" 近两年来,Python语言借着数据科学和人工智能的"东风"成为了最流行的编程语言--街头巷尾人们口口相传.同时,Pyth ...
- python语言入门-Python语言入门详解!快速学成Python!
原标题:Python语言入门详解!快速学成Python! 很多技能是被职场所需要的,但很可惜... 这些技能在大学中并学习不到. 大学和职场现实存在的横沟对大部分同学来说难以跨越或碰得头破血流... ...
- python语言入门详解-python初级教程:入门详解
python初级教程:入门详解 Crifan Li 目录 前言 .................................................................... ...
- 刘铁锰老师C#语言入门详解(委托事件等部分有详细代码和注释)
目录 1.初识类 1.1 类与对象的关系 1.2 类的三大成员 1.3 静态成员与实例成员 1.4 类修饰符 2.构成C#语言的基本元素 2.1 六个基本元素 2.2 算法简介 3. 详解类型.变量与 ...
- C#语言入门详解1-12
可供参考的别人的学习笔记:https://blog.csdn.net/Jacey_cai/article/details/122848272 文章目录 一.课程简介.C#语言简介.开发环境准备 二.初 ...
- C#语言入门详解13-19
文章目录 十三.十四.十五.十六.表达式,语句详解 框架 表达式的定义 各类表达式的概览 语句的定义 语句详解 声明语句 表达式语句 块语句 选择(判断.分支)语句 try语句 迭代语句 跳转语句 十 ...
- 2021-06-20-刘铁猛C#语言入门详解-学习笔记P20、21、22事件详解
P20.21.22事件详解 一.P20.21.22内容总结 事件的概念P20 事件的应用P21:四个实例 事件的声明P22 问题辨析P22:事件与委托的关系 二.事件的概念P20 事件的角色:使对象或 ...
最新文章
- 图解Detour安装及简单使用实例(Win7+VC6)
- formidable处理提交的表单或文件的简单介绍
- ntnub原理怎么看_老电工由浅入深带你入门学PLC的工作原理和梯形图的编程规则...
- 怎么用Python写出随时间变化的字_面试必备 | 带你彻底搞懂 Python 生成器
- 【EMV L2】CDA复合动态数据认证/应用密文生成
- python爬取美女图片
- React脚手架搭建及创建React项目
- 通过新建浏览器书签的方式给网页注入js代码
- 基于java SSM框架的医院体检管理系统
- html5制作星星闪烁和制作时钟
- 企业级Jumpserver的部署与使用-行癫亲测
- Pascal版2048
- 计算机组成原理 汇编语言
- 我的电脑开机后桌面上没有图标
- DELL 服务器 PCI-E 6IR 通道卡 6I阵列卡8口SAS SATA (整理)
- 12 投资心理建设宝典
- 使用TensorFlow识别交通标志
- 虚拟机和本机拷贝数据:
- 在ie浏览器下载文件乱码解决
- 2. 高光谱成像技术
热门文章
- 邮箱服务器输入密码,Foxmail的设置方法?
- Intel CPU的型号漫谈
- 表格列宽怎么设置?(excel表格)
- Win 10系统截图的7种方式【简单实用】
- 论文理解【Offline RL】 —— 【COIL】Curriculum Offline Imitating Learning
- 计算机共享网络的账号密码怎么设置密码,怎样才能给win10共享设置密码的操作方法...
- MySQL 轻量级Online DDL工具 —— gh-ost
- 《数值分析》-- 高斯消去法与矩阵三角分解法(LU分解)
- 4D领导力打造卓越团队
- python中sqrt函数用法_Python : sqrt() 函数