进阶部分
文章平均质量分 64
i++
詹姆士x
这个作者很懒,什么都没留下…
展开
-
c#入门-异步方法
如果一个操作会返回Task,那么用这个操作续接后续操作,也会得到Task。也就是说Task具有传染性,最终拼凑出来的Task非常复杂。使用异步方法,可以简化Task的拼凑。原创 2023-01-31 01:38:55 · 3049 阅读 · 0 评论 -
c#入门-线程安全
创建100个任务,任务里都循环100次,对目标值+1。按照预期,他的结果应该是10000,但实际上,结果可能缺斤少两。造成这样的原因,举个例子线程a过来了。看见num是31。它算出了+1后是32,但他突然很想去厕所,来不及改num。线程b过来了,看见num是31。它也算出了是32,也突然想去厕所。线程a回来了,把num改成了32.线程b回来了,把num改成了32.就这样,两次的i++操作都执行了。但由于取值,计算,赋值是三步操作。原创 2023-01-30 19:06:14 · 2468 阅读 · 0 评论 -
c#入门-配置Task
Task.Run创建Task时使用的委托,可以有返回值。而这个方法是有返回值的,返回他由这些配置创建出来的Task。如果是有返回值的就是泛型的Task。泛型Task继承了Task,具有他的全部功能。Wait方法可以等待任务直到完成,Result属性可以获取返回值。直接调用Result属性,也会间接调用Wait方法(如果没完成也会等待)原创 2023-01-30 12:22:02 · 462 阅读 · 0 评论 -
c#入门-Task创建线程
在c#中,有线程类。激活线程对象就可以实现多线程。不过,这是在代码角度来说的。你可以在代码中创建一万个线程。但实际上你的cpu没有一万个逻辑处理器来真正同时执行这一万个线程。所以我们称创建一万个线程为创建一万个并发——我们希望同时执行一万个线程,但实际上可能达不到。原创 2023-01-29 22:05:01 · 3272 阅读 · 1 评论 -
c#入门-自定义迭代器
单独做一个迭代器类,而不选择使用yield语法,可以防止在复杂情况下使一个方法过于臃肿。一个自定义迭代器需要有两个公开成员。原创 2023-01-29 13:20:37 · 366 阅读 · 0 评论 -
c#入门-查询表达式
语言集成查询 (LINQ),是.NET做出来的一种,希望在程序中能实现类似于数据库查询的功能。在数据库中,假如一个库的数据有1000G数据。希望在其中找出一个名字叫张三的人。如何查找呢?这么庞大的数据量是不可能全在程序运行时加载进内存。所以他会分片。一次只读取一块数据,如果满足就留下放到内存,如果不满足就读下一块数据。c#中的Linq类似于此效果。如果你只要求找出符合条件的一个数据。那么Linq一旦找到了一个数据,就会终止对数据的遍历。以此达到优化。原创 2023-01-06 22:13:35 · 2123 阅读 · 0 评论 -
c#入门-Linq其他注意事项
b ^= true;} } }返回值是IEnumerable的方法也可以使用yield语法。编译器会自动帮你合成出一个记录操作的IEnumerable,而不当场执行。原创 2023-01-06 22:13:20 · 542 阅读 · 0 评论 -
c#入门-迭代器
例如字符串,数组等包含的类型,可以使用foreach循环遍历元素。原创 2023-01-05 02:11:35 · 390 阅读 · 0 评论 -
c#入门-捕获变量
局部函数,匿名函数,可以直接在函数体内使用局部变量。如果作为委托使用,传递给别人。可能在别人使用委托的时候,这些局部变量的作用域就已经消失了。因此,编译器会对这些变量做出特殊的操作,将这些变量封装在一个类里面(编译器自己创建的类)。在原变量出了作用域后,因为在封装类里面还有引用,不会被清除。原创 2023-01-05 02:10:07 · 1647 阅读 · 0 评论 -
c#入门-多播委托,匿名函数
使用 – =时,如果储存了这个值,那么会移除第一个。如果没有则无事发生。委托是引用类型,默认值是null。委托可以和null相加,不会出现异常。原创 2023-01-05 02:09:32 · 1006 阅读 · 0 评论 -
c#入门-事件
委托作为字段使用时,需要有专门的访问器。不能是属性。因为一旦被别人拿到了get访问器,它就可以在任何时候以任何次数调用委托。一旦别人拿到了set访问器,别人就可以无限制地把已有地委托设置为null。事件就是委托的专属访问器。和属性一样,只能作为类成员存在。和属性一样,本身不保存字段,可以以实例成员存在与接口中。原创 2023-01-05 02:08:01 · 516 阅读 · 0 评论 -
c#入门-委托
前面的泛型是方法的参数类型。比如一个bool xxx(string name, int age)的方法对应的委托类型是Func原创 2022-12-02 13:03:30 · 616 阅读 · 2 评论 -
c#入门-协变,逆变
这是两个泛型列表。你不用在意他是什么,你只要知道他和数组很像就行。现在把第二个列表的内容,用第一个列表的内容覆写。把一个值赋值给不同类型的变量。但因为变量类型和值的类型有继承关系,所以可以成立。那么既然string类型可以赋值给object类型,那你有没有想过不访问元素,直接从外面进行赋值。首先告诉你,这种做法在数组上是可以的,但是按照c#的类型安全理念,不应该成立。这在编译时是可以通过的,但实际运行起来,会出现类型转换失败的异常。原创 2023-01-02 19:14:29 · 1101 阅读 · 0 评论 -
c#入门-泛型约束
使用泛型时会假设泛型占位符是任何类型。但因为它被假设是任何类型,所以使用起来有很大的限制。只有所有类型都有的功能,他才能用。为了满足所有的可能类型,可用的操作非常少。为此我们可以为泛型占位符添加约束。虽然会让能兼容的类型变少,但是可以使用更多的操作。原创 2023-01-02 18:40:04 · 427 阅读 · 0 评论 -
c#入门-finally块和using语句
finally块需要配合try块使用。这个try块可是是有catch块,也可以是没有catch块的。如果try没有异常,或是catch没有捕获到异常,那么在try执行完毕后执行finally块。如果触发了异常且catch块捕获到了异常,那么在这个catch块执行完毕后执行finally块。总之,finally块执行一个收尾工作,只能写在所有catch块的后面(如果有catch块)。原创 2022-12-28 17:15:55 · 894 阅读 · 0 评论 -
c#入门-系统特性
特性可以给成员添加元数据。第一点涉及到反射的内容,先略过。而第二点要求的编译器认实这个特性,就仅限于系统自带的特性。原创 2022-12-28 14:38:08 · 498 阅读 · 0 评论 -
c#入门-LINQ方法版本
查询表达式的各种查询,在编译后都会转为对Enumerable类下的静态方法进行调用。而Enumerable类下的大部分方法都是扩展方法,扩展源是IEnumerable接口。所以Linq的方法版本需要从实现了IEnumerable接口的类型上访问。原创 2022-02-09 03:54:37 · 1240 阅读 · 0 评论 -
c#入门-组合task
CPU到内存之间的交互,可以认为是立刻的。但如果内存需要从硬盘 / 网络 等地方加载资源,时间量级相差太大,这就不能忽略了。仅靠CPU和内存就能完成的任务,称为CPU密集型,需要从外部加载资源的任务,称为IO密集型。原创 2022-02-04 00:08:51 · 1656 阅读 · 0 评论 -
c#入门-自定义委托类型
也就是说所有的带有out/in/ref参数类型的函数都无法使用官方定义的委托类型。官方定义的泛型委托写了很多的重载。最高可以支持16个参数。足以满足大多数需求。委托类型的声明语法是:关键字delegate+返回类型+方法名+参数列表。就像声明抽象方法一样,以分号结尾,不能带函数主体。委托类型的声明看起来很像在声明方法。此刻只能自己声明委托类型。原创 2022-02-01 18:34:26 · 781 阅读 · 0 评论 -
c#入门-泛型
现在给出一个题目:要求写出一个函数,他能对一个int数组进行排序,并且返回这个数组的最小值和最大值。这很容易好,但这不是重点。接下来要求你再写一个函数。作用一样,但是针对的是double类型。好,现在要求再写一个针对string类型的。同样的要求重复了三次,却只改动其中的一小部分。现在你应该意识到问题了。如果int,double,string类型都要求有效,那之后会不会要求float,byte,甚至自定义类型也有效。那针对每一种类型都需要写一种重载吗?原创 2022-02-01 01:25:00 · 1946 阅读 · 0 评论 -
c#入门-抛出异常,捕获异常
一个程序可能因为各种各样的问题无法正常运行。重点是,我们要知道程序是因为什么问题而无法运行的。然后再根据问题来排除问题。一种常见的方式是给出一串错误码,然后开发人员查对照表。而在c#中,允许在程序内就解决问题。那么就不需要以字符串的形式给开发者看了。只需要直接使用类进行交互就行了。异常类继承自Exception类。如果不使用异常语法使用,那么他就是一个正常的类。可以new构造,可以赋值,可以取值。原创 2022-01-29 18:19:41 · 4547 阅读 · 0 评论 -
c#入门-自定义特性
特性是普通的类,可以有类的一切功能,但是特性需要继承Attribute类。原创 2022-01-31 00:48:39 · 460 阅读 · 0 评论