自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(29)
  • 收藏
  • 关注

原创 线程与Task的区别 async和await关键字

很多文档包括msdn都刻意提到async/await关键字不会创建新的线程,用async关键字写的函数中的代码都在调用线程中执行。**通过反编译分析,我们知道本质上是await调用的异步函数执行完成后回调状态机的MoveNext来执行余下未执行完成的代码,await调用的异步函数必然在某个地方——也许是嵌套了很深的一个地方——启动了一个新的工作线程?Task,表示异步方法将返回一个 Task 对象,该对象的 Result 属性则是异步方法的执行结果,调用该属性时将阻塞当前线程(异步方法未执行完成时)。

2024-04-10 20:16:10 181 1

原创 多线程 线程池 Task

NET Framework2.0时代,出现了一个线程池ThreadPool,是一种池化思想,如果需要使用线程,就可以直接到线程池中去获取直接使用,如果使用完毕,在自动的回放到线程池去;多线程是指程序中包含多个执行流(线程),即在一个程序中可以同时运行多个不同的线程来执行不同的任务,也就是说允许单个程序创建多个并行执行的线程来完成各自的任务。Task在.net 4.0时出现,是在线程池基础上封装而来的,提供了对线程的延续,取消,等待,超时等方面功能。

2024-04-09 19:52:48 351

原创 进程与线程

进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配的基本单位,是操作系统结构的基础。在当代面向线程设计的计算机结构中,进程是线程的容器。程序是指令、数据及其组织形式的描述,进程是程序的实体。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。概括:线程是操作系统资源调度的最小单位。多线程中有N个线程,但主线程只有一个,其他的线程都称为分线程。串行===>排队===>阻塞(同步) 并行===>无序===>非阻塞(异步)

2024-04-09 19:46:31 216

原创 ArrayList 与 List的区别 数组与集合的区别

List 比 ArrayList 的内存效率更高,因为类型安全所以List也比 ArrayList 具有更高的性能效率。与 ArrayList 相比, List 具有更好的 API 支持,通过它提供的方法和属性,可以更快地访问元素。很明显,List 在任何比较中都胜过 ArrayList,因为它更好,更高效且类型安全。List 是一种泛型集合类型,允许用户存储声明时 List 指定的数据类型的对象。一般来说,List 比 ArrayList 更节省内存,因为它不必为集合中的每个元素存储对象引用。

2024-03-27 17:32:09 511

原创 ref struct 与ref return

C# 中的 ref return 又称引用返回,它允许一个方法返回对象的引用而不是对象的值。ref return 在 C# 7.0 中引入,主要用于优化性能,特别是在处理大型结构时,因为它避免了值类型的复制。不能被装箱或者转换为 Object、ValueType 或 System.Enum。不能被用作闭包变量(也就是不能被捕获到 lambda 表达式或本地函数中)。不能作为其他 ref struct 的字段,除非该字段被标记为 ref。定义时,方法返回值类型前加ref。不能作为类、普通结构或数组的成员。

2024-03-19 17:41:06 136

原创 【无标题】可空类型与析构函数

析构函数会在对象被垃圾收集器回收时调用,但垃圾收集器有个特点,它是懒惰的,它并不会在变量出了作用域和生命期后立即回收,而是在它认为适当的时候才回收,一般是内存紧张的时候。// s2还在使用,不为null,不让垃圾回器去回收s2。Console.WriteLine("开发者一般不建议调用析构函数,GC进行回收时,GC自动调用。// 以上的这些操作,GC都不会回收,GC只会回收两种类型的数据:null和游离的。// 明确告诉垃圾回收器,s不再使用了,你可以回收。// x2为null时,使用?

2024-03-19 17:30:02 380

原创 结构体与枚举

当您使用 New 操作符创建一个结构对象时,会调用适当的构造函数来创建结构。如果不使用 New 操作符,只有在所有的字段都被初始化之后,字段才被赋值,对象才被使用。结构和类相比,一般保存的数据量少,存储在栈上,读取速度比类快。Wednesday = 8,// 2的3次冥。Thursday = 16,// 2的4次冥。Sunday = 1, // 2的0次冥。Monday = 2, // 2的1次冥。Tuesday = 4,// 2的2次冥。Friday = 32,// 2的5次冥。但结构可以实现接口。

2024-03-19 17:11:23 122

原创 string和StringBuilder扩容机制与性能比较常用API

/ 累加字符串后,会添加换行符,换行符占两个索引位置。StringBuilder sb3 = new StringBuilder("ab世界");StringBuilder sb2 = new StringBuilder("ab世界");// 规律:引用类型比较(除字符串string字面量外),一般比较的是地址。// 插入:参数1:插入的起始索引。参数1:删除的起始索引。sb.Replace("world", "世界");// 规律:Equals一般比较是值。

2024-03-18 17:57:26 311

原创 字符串常用API

,Concat,Contains, =,Copy,CopyTo,EndWith,StartWith,==,Equals,IndexOf,LastIndexof,IndexOfAny,LastIndexofAny,insert,String.Empty,IsNullOrEmpty,IsNullOrWhiteSpace,Join,PadLeft,PadRight, Remove,Replace,Split ,格式化 N C P X 00.00,##,##// True, 字符串相等比较,比较的是值。

2024-03-18 17:52:52 245

原创 数组的协变

animals[0] = new Dog() { Id = 1, Name = "京巴" };animals[1] = new Dog() { Id = 2, Name = "土狗" };new Dog() { Id = 1, Name = "京巴1",Age=10 },new Dog() { Id = 2, Name = "土狗2",Age=20 }数组协变的概念:引用类型的数组,子类的数组类型可以赋值给父类的类型。// item是哪一种类型?// 虽然10是int类型,但值类型的数组没有协变。

2024-03-14 15:06:19 218 1

原创 堆和栈的区别

栈的内存分配速度通常比堆快,因为栈是连续的内存空间,分配和访问效率较高;堆的内存分配速度相对较慢,因为它不要求内存是连续的,分配时需要搜索空闲内存块。栈中的内容通常是线程私有的,因为它们在各自的线程中分配;堆中的内容则是所有线程共有的,因为它们在进程的地址空间中分配。堆的内存分配则更加灵活,可以分配较大或较小的内存空间。堆中的内容则需要程序员手动管理内存的释放,否则可能导致内存泄漏。堆是不连续的内存空间,其内存分配更加灵活。栈通常由操作系统自动分配和释放,堆则需要程序员手动分配和释放,其内存分配更加灵活。

2024-03-07 19:03:27 147 1

原创 C#简单穿梭框 winForm

MessageBox.Show("请选择左边的项","提示",MessageBoxButtons.OK,MessageBoxIcon.Information);MessageBox.Show("请选择右边的项","提示",MessageBoxButtons.OK,MessageBoxIcon.Information);lbRight.Items.AddRange(new string[] { "第一项", "第二项" });//删除 首先将左边要删除的项的下标收集起来。//将左边选中的项循环添加到右框。

2024-02-26 19:20:48 1289 1

原创 List(列表)简单属性

List list = new List() { "hellow", "word" }; List list2 = new List() { 1, 2, 3 }; List list1 = new List() { 1, "hellow", false }; list.Add("mm"); //添加字符串数组 list.AddRange(new string[] { "xiin", "erxiang" }

2024-02-26 13:39:34 392 1

原创 Collection(集合的常用属性)

/ 移除,注意参数是项的值,而非项的索引 1 3。//Add()会影响集合,Append()不会影响集合,//使用字符串的FindIndex 查找指定的a的下标。

2024-02-23 17:10:47 269 1

原创 DriveInfo(驱动器) 的常用内容

/驱动器可用空间以字节为单位。

2024-02-22 13:35:20 236 1

原创 Directory(文件夹) 常用属性

/得到目录下的文件。//是否删除目录下的文件或文件夹。

2024-02-21 14:09:27 337 1

原创 FileInfo 的简单使用

GetFileType通过扩展名获取文件的类型, 获取文件字节的长度 获取文件夹的全称 获取文件的名称 获取完整的目录名。using(FileStream fs =fileInfo2.Create()) //如果不存在则创建并添加 如果存在则添加。if (fileInfo.Exists) 如果a文件已存在则先将其删除再将文件剪切到D盘。

2024-02-20 18:56:14 404

原创 C# 日期案例 控制台输出当前月的日历

i < iweek;i++)

2024-02-20 14:45:05 322

原创 File 的简单使用

File.Exists(@"D:\d.txt")) 如果D盘中不存在d.txt 则在该路径文件下创建d.txt 如果存在则创建以时间戳为文件名的txt文件。

2024-02-20 14:38:31 328

原创 按日期筛选数据案例

new Student() { Id = 2, Name = "张三", Age = 18, Sex = "男", bridaty = new DateTime(2024, 3, 15) },new Student() { Id = 3, Name = "张三", Age = 18, Sex = "男", bridaty = new DateTime(2024, 4, 15) },//清空将两个dateTimePicker清空方便重新搜索 清空时需将日期恢复成当前日期。//得到该时间区间内符合的数据。

2024-02-19 20:55:15 1237 1

原创 C#中的DateTime 类型

Console.WriteLine($"天间隔{Math.Round(daydiff)}");Console.WriteLine($"小时间隔{Math.Round(hours)}");获取当前时间的后一1小时2分钟20秒。获取日期函数的最大日期和最小日期。获取当前日期的年月日时分秒毫秒。

2024-02-19 20:36:52 344 1

原创 ref,out,in 关键字的异同

ref参数称为引用参数, in参数称为输入参数,out参数称为输出参数。

2024-01-26 19:40:27 145 1

原创 静态类与密封类

静态类使用static关键字修饰不能在静态类中有实例成员,与构造函数,静态类中只能有静态成员静态类不能实例化无法使用new来创建类的类型的变量可以使用类名本身访问静态类的成员静态类是密封的不能扩展继承的static修饰的类成员会被多个对象共享。

2024-01-24 19:29:12 332 1

原创 重载(overload)和重写(override)的异同 与new修饰符

相同点:重载和重写都是多态的表现。不同点:重载【发生在同一类或者子类中】,【方法名称相同】,但【参数列表不同】,【不需要特殊关键字】。参数列表不同包括:参数类型,参数个数,参数顺序,三者有一个不同即可。重写【发生在子类中】,子类对【父类的虚方法】进行重新实现,使用【override关键字】和【相同的方法名】进行重写。

2024-01-23 19:14:26 366 1

原创 重写与 虚方法,抽象方法,抽象类

使用virtual修饰的方法,称为虚方法。父类中的成员只有被virtual(虚方法) abstract(抽象方法) override(重写)其中一个修饰过才可以被子类重写虚方法是一种允许派生类(子类)覆盖(重写)基类(父类)中的方法的技术。虚方法是必须实现。虚方法不能是私有的。virtual关键字不仅用于修改方法、还可以修改属性、索引器或事件声明,并使它们可以在派生类中被重写。

2024-01-23 18:06:33 396 1

原创 类的三大特征

关键字:子类:父类。子类继承父类的属性,方法事件等 ,子类可以自己使用, 是面向对象的基础,继承父类的属性方法后 如果子类需要拥有父类没有的成员我们可以对子类进行扩展 添加新的方法或属性, 或者(重写)对父类中的方法进行覆盖 优点提高代码复用。关键字get set 类,属性,和方法都可以封装通常只封装方法(可以理解成一个操作台传入原料经过(代码逻辑)加工生成自己想要的东西)通常是将一些重复的内容封装成一个方法,然后直接调用。多种形态,类的多种形态如泛型,方法的多态:重写、重载、

2024-01-23 17:53:02 336 1

原创 C# 概念及特点 NET Framework 及编译原理

C#是微软(Microsoft)公司基于.NET FrameWork框架设计的面向对象的程序设计语言,并且是类型安全的强类型语言。C#高级语言是运行在.NETFrameWork框架之上的。C#是从C和C++派生来的一种简单、现代、面向对象和类型安全的编程语言,并且能够与.NET框架完美结合。C#具有以下特点:语法简洁。彻底的面向对象设计。与Web紧密结合。灵活的版本处理技术。完善的错误、异常处理机制。强类型的。

2024-01-22 20:14:00 1654

原创 C# Main方法,静态方法 方法签名

Main必须是静态的,它是整个程序的入口。main重载形式有很多C# Main方法是可以有返回值的。但不能返回string类型的值。Main也可以不带参数C# Main方法是可以支持异步的C# Main方法不能传递1个以上的参数,但是可以通过数组传递多个值,向C# Main方法中传递参数的方法,项目属性右键---》调试---》启动选项---》命令行参数,向其中添加参数如字符串 aa bb 多个值用空格隔开传递下来的参数可以或者通过索引调用,或者foreach循环调用。

2024-01-22 20:03:29 386

原创 C#注释,命名空间,命名规范,标识符

1.单行注释 // 添加注释ctrl+K +C 取消注释ctrl +K +U2.多行注释 /* */ 添加注释ctrl+shift +/ 取消注释ctrl+shift+/3.块注释 /***/ 一般用到.cs文件的注释 开始有两个**时,每一次回车换行时,会以*开头,注释会显得很整齐 快速格式化的快捷键:ctrl+k+d块注释一般用于 公司名|域名反转.产品名.模块名4.xml注释。

2024-01-22 19:54:54 474

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除