随笔分类 -  C# 基本语法

摘要:线程之间互不相干但是 多播(multicast)委托 举个例子:不同学生用不同颜色的笔做作业。 学生类(这个类在以下的各个例子中是不变的) class Student { public int ID { get; set; } public ConsoleColor PenColor { get; 阅读全文
posted @ 2019-10-14 11:00 卯毛 阅读(364) 评论(0) 推荐(0)
摘要:模板方法: 有这么一家厂家,做披萨和玩具车两种Product,并且给他们的产品装在不同的包装盒Box里,我们通过委托的方式给他们的产品装上包装盒。 产品类 包装盒类 包装车间类 这里多说一句,包装车间类里有包装产品方法WarpProduct(),这个方法的参数是委托类型的变量getPorduct, 阅读全文
posted @ 2019-10-12 10:10 卯毛 阅读(284) 评论(0) 推荐(0)
摘要:泛型委托我们之前已经用过很多了,泛型委托经常和lamuda表达式一起使用组成LINQ查询 Action无返回值 Func有返回值 z lambda表达式与泛型委托的结合: 把函数 用 表示,a,b的类型呢是由泛型Func来限定 阅读全文
posted @ 2019-10-11 14:09 卯毛 阅读(106) 评论(0) 推荐(0)
摘要:例子: static T[] Zip(T[] a, T[] b) static void Main(string[] args) { int[] a1 = { 1, 2, 3, 4, 5 }; int[] a2 = { 1, 2, 3, 4, 5 }; double[] a3 = { 1.1, 2. 阅读全文
posted @ 2019-10-11 14:06 卯毛 阅读(402) 评论(0) 推荐(0)
摘要:泛型接口例子:一个学生有一个独一无二的ID,但是每个学生的姓名不一定是唯一的。 如果这个类实现的是泛型接口,那么这个类也是泛型的,实现接口的时候必须把接口里全部的成员实现。 另一种情况,类实现的是特化之后的泛型接口,这样的类就不是泛型类了。 直接在类继承接口的时候就注入ulong类型,则类就不需要设 阅读全文
posted @ 2019-10-10 19:53 卯毛 阅读(366) 评论(0) 推荐(0)
摘要:我们每个苹果都套个盒子,给每本书都套个盒子,但是苹果盒子和书盒子是不同的, 这样下去如果有更多的东西需要套盒子,1000种产品有1000种相应的盒子,造成类型极度膨胀非常难以维护。 我们只准备一种盒子,让这种盒子有不同属性可以装任何东西。 如果有1000种东西需要1000种盒子,在Box类种有100 阅读全文
posted @ 2019-10-10 18:47 卯毛 阅读(496) 评论(0) 推荐(0)
摘要:首先,我们需要知道type,type是类型的类型(笑 官方点的说法是,BCL声明了一个Type抽象类,它被设计用来包含类型的特性, 使用这个类的对象(抽象类的对象?这显然是错误的,但是这里用的其实是Type的派生类的对象)能让我们获得程序使用的类型的信息, 对于程序用到的每一个类型,CLR都会创建一 阅读全文
posted @ 2019-10-10 13:50 卯毛 阅读(253) 评论(0) 推荐(0)
摘要:首先我们要下载程序包 然后添加引用: 我们用到了: ServiceCollection()方法, AddScoped()方法,每次请求,都获取一个新的实例。同一个请求获取多次会得到相同的实例 我们通过AddScoped获得实例(对象) BuildServiceProvider()方法, GetSer 阅读全文
posted @ 2019-10-09 14:44 卯毛 阅读(471) 评论(0) 推荐(0)
摘要:依赖关系: 在自顶向下逐步求精的过程中, 大问题的解决依赖于中问题和小问题的解决, 中问题的解决依赖于小问题的解决,箭头向下指表示调用者依赖提供者。 在面向对象过程中一般的依赖关系是: 图为不同司机对应开不同车。 但事实是一个司机可以驾驶多种车,引入依赖反转原则。 依赖反转原则是另一种思路,并不是对 阅读全文
posted @ 2019-10-07 13:17 卯毛 阅读(244) 评论(0) 推荐(0)
摘要:在介绍接口Interface的主要功能之前,我们先介绍一下什么是紧耦合 紧耦合的编程: 倘若Engine类出现错误,如误写为this.RPM = 0; 则在大项目中难以定位修改这个问题,因此引入接口减少耦合程度。 接口是一组契约,用来约束一组功能,这组功能的调用者是被约束的,被约束为只能调用这组接口 阅读全文
posted @ 2019-10-05 15:31 卯毛 阅读(1062) 评论(0) 推荐(0)
摘要:我们以以下代码为例,简述一下抽象类与接口的由来和使用 我们发现这个例子中,Vehicle类中的Run()和Stop()方法根本没有用到过,而且Vehicle is Running 这种说法太不具体了。 因此我们修改Vehicle类,让Run()和Stop()方法里干脆啥都别写了,反正又用不到 但是{ 阅读全文
posted @ 2019-09-30 14:24 卯毛 阅读(291) 评论(0) 推荐(0)
摘要:首先:类成员的访问级别是以类的访问级别为上限的! 也就是类的访问级别低时,类成员的访问级别高也无法突破类的访问级别 public级别,作用域是这个解决方案() internal级别,作用域是整个装配集(Assembly) protected级别,作用域是整个解决方案()中以它自己的类为基类以及它的派 阅读全文
posted @ 2019-09-28 16:27 卯毛 阅读(928) 评论(0) 推荐(0)
摘要:继承中的隐藏:(不要使用隐藏,语法没有错误但是开发项目时会被视为错误) 在继承类中完全保留基类中的函数名 隐藏之后,Car中的Run()有两个版本,一个是继承来的Run() 被隐藏,另一个是Car中新写的Run()。 两个版本共存, 如果引用类型是父类,实例类型是子类,调用隐藏方法, 如果引用类型是 阅读全文
posted @ 2019-09-28 16:01 卯毛 阅读(472) 评论(0) 推荐(0)
摘要:``` class Program { static void Main(string[] args) { Type t = typeof(Student);//typeof(类) 取类的类型 并且存储在Type类型的t变量(其实是把类的类型的引用存在t中) //t stu1 = new t();这样是... 阅读全文
posted @ 2019-09-27 09:04 卯毛 阅读(199) 评论(0) 推荐(0)
摘要:class Program { static void Main(string[] args) { var dog = new Dog("A"); dog.IsHappy(new shit());//狗看到狗屎很开心 //dog.IsHappy(3);//狗看到数字3很开心,未添加约束时可以生效 / 阅读全文
posted @ 2019-09-07 09:02 卯毛 阅读(180) 评论(0) 推荐(0)
摘要:今天突然被问FromBase64String(String)和Encoding.Default.GetBytes(String)有啥区别,我刚开始学C 对这个一脸懵逼,于是总结一下今天查资料的内容。 首先,什么是Base64? Base64呀,是个加密算法,原理呢在这里不重要,以后有机会补充,这里仅 阅读全文
posted @ 2019-08-23 10:44 卯毛 阅读(884) 评论(0) 推荐(0)
摘要:很多时候我们不可以把一些字段暴露出来允许别人调用和修改,为了隐藏这些字段又便于加限制的使用,在面向对象编程中一般采用写get set函数的办法,比如: 阅读全文
posted @ 2019-08-22 14:40 卯毛 阅读(1305) 评论(0) 推荐(0)
摘要:并非每个对象都可以直接转换为int。例如,以下内容将无法编译: 因为string无法隐式转换为int。 如果必须要做就这样写: 阅读全文
posted @ 2019-08-22 11:30 卯毛 阅读(14889) 评论(0) 推荐(1)
摘要:C语言中的函数指针: 一切皆地址: 程序的本质是变量+算法 变量是以变量名对应内存地址为起点的一段内存,其所存储的数据就是变量里的数据,这段内存的大小由变量的数据类型决定 变量是地址。 函数是以函数名对应的内存地址为起点的一段内存,这段内存存储的不是某个值,而是一组机器语言的指令,CPU按照这组指令 阅读全文
posted @ 2019-08-22 11:21 卯毛 阅读(525) 评论(0) 推荐(0)