
【C#图解教程】读书笔记+C#平常记录
文章平均质量分 71
记录C#图解教程学习笔记、供自己查阅
Ha啤酒来大杯的
不会就问我,问了也不一定会
展开
-
C# 写入文件比较
经排查BitConverter.GetBytes源码如下,是上面比较耗时的地方,并且每次都会创建数组。FileStream固定chunk写入,循环操作数组,耗时13.4126 ms。FileStream固定chunk写入,直接操作数组,耗时10.2729 ms。可以将上面改进一下,直接将代码内联进入上面代码上, 耗时2.8165 ms。StreamWriter每次写一个long 耗时44.0934 ms。FileStream每次写一个long 耗时20.5142 ms。数据长度:128188个long。原创 2023-10-24 12:01:19 · 590 阅读 · 0 评论 -
C#图解教程读书笔记(四 预处理、反射、特性、C#6.0,7.0新内容)
提要,此文章并不会记录过于基础的东西,只会记录个人认为比较重要的概念以及实用的代码,如果您是新手强烈建议阅读实体书,自己一步一步敲一遍第二十二章 命名空间和程序集using 别名 usign Sys = System;using static 引用指定命名空间中特定的类,从而使用其静态成员程序集的构成 在第一章.Net中就讲过了主要的是CIL通过JIT动态编译使用的东西、程序集中类型的元数据、引用其他程序集列表等等。第二十三章 异常第二十四章 预处理指令概念 指示编译器如何处理源代.原创 2021-08-11 15:40:43 · 322 阅读 · 0 评论 -
C#图解教程读书笔记(三 类型转换、泛型、协变/逆变、迭代器、异步编程)
提要,此文章并不会记录过于基础的东西,只会记录个人认为比较重要的概念以及实用的代码,如果您是新手强烈建议阅读实体书,自己一步一步敲一遍第十七章 转换显示转换 例如高位数字转低位数字需要进行显示转换,此时会出现数据丢失问题,可以利用checked/unchecked来控制是否抛出overflow异常。其中checked/unchecked可以作用于表达式和代码片段。引用转换的隐式转换 :1、所有引用类型可以被隐式转换为object。2、任何接口可以被隐式转换为继承的接口 3、任何类可以隐式转换为继.原创 2021-08-10 19:44:20 · 453 阅读 · 0 评论 -
C#图解教程读书笔记(二 类、结构体、枚举、数组、接口等)
提要,此文章并不会记录过于基础的东西,只会记录个人认为比较重要的概念以及实用的代码,如果您是新手强烈建议阅读实体书,自己一步一步敲一遍第七章 深入理解类按照推荐的编码 属性比共有字段更好静态构造函数 不需要加访问修饰符直接在构造函数前加static,静态构造函数由系统调用,一般用于初始化静态成员。 静态构造函数调用时机 1、类的任何实例被创建前 2、类的任何静态成员被引用前索引器 索引器和属性很像有get有set,索引器是可以重载的(返回类型和参数列表都可以不同) returnType t.原创 2021-08-09 21:56:36 · 320 阅读 · 2 评论 -
C#图解教程读书笔记(一 .NET、变量、类、通过栈如何理解并编写递归函数)
第一章.Net构成 由CLR(公共语言运行库)和FCL(是BCL(基类库)的超集)构成CLR包含的功能主要有:1、内存管理和垃圾回收 2、代码的安全验证 3、代码执行、线程管理和异常处理程序集DLL 包含 1、程序的CIL(公共中间语言)2、程序中使用类型的元数据 3、对其他程序集引用的元数据CIL编译本机代码 运行时CLR步骤 1、检查DLL安全特性 2、在内存中分配空间 3、把DLL中可执行代码发送给JIT(即时编译器),然后在调用时编译成本机代码托管/非托管代码 区别就是非托管代码不受C.原创 2021-08-06 16:55:07 · 171 阅读 · 0 评论 -
C#线程和Task
Task:https://www.cnblogs.com/mq0036/p/9040614.html#async/await:await相当于分支;#Task:task.Result task函数具有返回值task 4 种启动方式:1、run2、start3、TaskFactory4、RunSynchronously 同步执行,阻塞主线程task控制:1、task1.Wait()等待某个2、Task.WaitAll等待所有完成3、Task.WaitAny等待任何一个123均为阻塞原创 2021-07-02 10:19:30 · 695 阅读 · 0 评论 -
C#字典原理
学习地址:https://www.cnblogs.com/incerry/p/10325290.html1、相同的数据进行Hash运算,得到的结果一定相同。HashFunc(key1) == HashFunc(key1),不同的数据进行Hash运算,其结果也可能会相同,(Hash会产生碰撞)。key1 != key2 => HashFunc(key1) == HashFunc(key2)。Hash运算时不可逆的,不能由key获取原始的数据。key1 => hashCode但是hashCode原创 2021-07-02 10:19:16 · 1184 阅读 · 0 评论 -
C# async/await源码执行逻辑梳理
主要是为了看ET框架的ETTask这一节源码。所以来梳理一下C# async执行逻辑参考文章:https://www.cnblogs.com/pangjianxin/p/8710471.htmlhttps://www.jianshu.com/p/5dfbccac5c27https://blog.youkuaiyun.com/weixin_43990579/article/details/105417652?spm=1001.2014.3001.5501https://www.cnblogs.com/rayth原创 2021-07-02 10:13:30 · 718 阅读 · 0 评论 -
C#函数传参数问题
保存引用类型时,栈中存放引用类型地址,地址指向堆中的实际值。private int globalI = 1; private int[] globalArr = new[] {1, 2, 3, 4}; private void Start() { Func1(globalI); Debug.Log(globalI); Fun...原创 2021-03-20 14:47:39 · 129 阅读 · 0 评论 -
GC垃圾回收机制
托管堆:由Mono分配与管理。而托管的 意思是可以自动改变堆的大小,适应内存的需要,适合时机调用GC释放内存。Unity内存管理机制1、Unity存在2个内存管理区域,堆和堆栈,堆栈一般存储小和短暂的数据,堆存储大和时间长的数据2、堆和堆栈之间差异:堆栈分配与回收较快。而堆在分配内时,先检查是否有内存,如果没有,将会进行GC,堆在GC后内存仍然不足时,将会申请内存,但是GC所释放的内存,将...原创 2021-03-10 22:09:23 · 346 阅读 · 0 评论 -
MemberInfo、PropertyInfo、FieldInfo
public class CreateInstance:MonoBehaviour { private void Start() { ExamClass ecls = new ExamClass(); MemberInfo[] mArr = ecls.GetType().GetMembers(); ...原创 2020-10-19 18:13:52 · 140 阅读 · 0 评论 -
特性类基础
特性类using System;using System.Collections;using System.Collections.Generic;using System.Linq;using System.Reflection;using UnityEngine;[Demo(10,Name ="小韩")]public class NewBehaviourScript : Mo...原创 2020-10-14 11:17:12 · 121 阅读 · 0 评论 -
常用Linq操作
常用:https://zhuanlan.zhihu.com/p/141469940IEnumerable<int> s = new List<int>() { 1,2,3,4,5,6,7,9}; IEnumerable<int> res = s.Where(t => t > 5); int count = s.Cou...原创 2020-10-14 11:17:02 · 87 阅读 · 0 评论 -
线程和Task
Task:https://www.cnblogs.com/mq0036/p/9040614.htmlasync/await:await相当于分支;Task:task.Result task函数具有返回值task 4 种启动方式:1、run2、start3、TaskFactory4、RunSynchronously 同步执行,阻塞主线程task控制:1、task1.Wait()...原创 2020-09-17 19:37:14 · 205 阅读 · 0 评论 -
C#委托匿名函数闭包等
1、Delegate普通委托:如public delegate void MyDelegate();public MyDelegate mydelegate; //需要实例化的,用的时候直接=赋值就可以了2、事件:利用event声明,相对于普通的委托,拥有了2条限制1)此委托无法被其他类直接调用2)此委托无法通过=直接赋值,只能通过+=(订阅)和-=(取消订阅)方式赋值3、...原创 2020-08-06 22:49:57 · 352 阅读 · 0 评论