
编程语言学习笔记C#
文章平均质量分 61
关于C#的学习笔记
qq_42987967
这个作者很懒,什么都没留下…
展开
-
weak_ptr如何能做到解决循环引用又能传递参数呢?
今天在看CLR via C#的时候看到C#的垃圾回收算法--引用跟踪算法的时候想到以下几个问题。原创 2024-01-07 02:21:50 · 717 阅读 · 0 评论 -
C#反射加载程序集并使用
要动态加载的dll跟输出目录中的dll冲突了,尤其是调用loadfrom的时候,其所依赖的dll一般会从输出目录中获取,但是输出目录中的dll并不是你想要的依赖版本,这时候就会冲突。当前,在一个AppDomain中只能加载dll,不能卸载,因此在一个AppDomain中不能有同名的dll程序集。加载程序集的时候会连带性的加载,会连带把该文件所依赖的dll也加载。仅加载一个文件,不会连带把该文件所依赖的dll也加载。一个线程属于一个AppDoMain。原创 2023-12-09 03:42:54 · 774 阅读 · 1 评论 -
C#:in、out、ref关键字
关键字会导致按引用传递参数,但确保未修改参数。它让形参成为实参的别名,这必须是变量。2)不要混淆通过引用传递的概念与引用类型的概念。ref主要对值类型会有较大的影响,其修饰函数形参与in和out没有很大区别。1)在某些情况下,按引用访问值可避免潜在的高开销复制操作,从而提高性能。当in修饰基本数据类型时,我们无法修改基本数据类型的值,只能读取。引用类型就比较灵活了,其是可以修改引用类型的成员变量的值的。形参的实参必须先经过初始化,然后才能传递。形参不同,在传递之前,不需要显式初始化该形参的实参。...原创 2022-07-22 16:33:36 · 4552 阅读 · 0 评论 -
C#:readonly与const
可以看出readonly修饰的值类型,值类型的成员变量也将是readonly的,但是修饰引用类型时,其本质是一个常量指针,引用类型的成员变量是不受readonly修饰符约束的。可以在字段声明和构造函数中多次分配和重新分配只读字段,在其他时候则是无法赋值的。3)const修饰的变量不能再用static变量进行修饰,并且其只能在字段的声明中初始化。C#当中的const没有C++中那么灵活,所能修饰的变量类型很有限。1)readonly修饰的变量是在运行时才进行赋值的。2)readonly修饰值类型和引用类型。.原创 2022-07-21 21:06:42 · 951 阅读 · 0 评论 -
Unity C#:使用this关键字对类函数进行拓展
声明了静态拓展函数后IDE会自动为我们提示该函数,通过自定义拓展函数可以有效提高开发效率。原创 2022-07-20 19:51:49 · 790 阅读 · 0 评论 -
Unity C#:浅析同步异步与阻塞非阻塞与async关键字
前言:作为一名新手,感觉同步异步与阻塞非阻塞这两对概念是在是长得太像了,网络上也是众说纷纭,接下来给出自己的理解吧,理解仅限于当前的知识范围,可能会有错误,还得继续改进。话不多说,先贴几个比较高赞的帖子。理解同步/异步和阻塞/非阻塞的区别_linhuaiyang的博客-优快云博客_异步阻塞和同步阻塞的区别怎样理解阻塞非阻塞与同步异步的区别? - 知乎socket阻塞和非阻塞有哪些影响_mayue_csdn的博客-优快云博客_非阻塞socket完全理解同步/异步与阻塞/非阻塞 - 知乎微软官方举的异步的例原创 2022-07-06 16:40:29 · 2406 阅读 · 2 评论 -
C#:委托与事件
仅仅是个人理解,为涉及对底层原理的探究,主要是为了促进对委托和事件的记忆和理解。该部分参考自:面试官:事件是以特殊方式声明的委托字段吗?(C#事件、委托详解) - 知乎一般来说可以这样类比:1)delegate 相当于定义一个函数类型(声明函数的返回类型和形参)。2)event 用于修饰 delegate定义后的函数类型的函数指针(回调函数指针)。3)不用event也能修饰 delegate定义后的函数类型的函数指针,但加上了event会使这个函数指针更加安全。4)相对函数指针来说,委托更安全。接下来原创 2022-06-22 20:18:21 · 330 阅读 · 0 评论 -
Unity3d C#:从迭代器到协程
进程、线程、协程是几个很基础且重要的知识点。而在C#中要理解协程得先理解一下迭代器。接下来从一个初学者的角度浅要分析(如有误还恳请指出)。先简单说明一下迭代器。迭代器通过去继承和实现IEnumerable跟IEnumerator这两接口,接下来便可以为foreach所使用。整体可参考:C#迭代器 - 知乎接下来从应用的角度介绍几种能够实现迭代器的办法。这是最基础的方法,但是通过这种方法能很好滴能清楚背后的原理。该部分及方法二参考自:C# 迭代器_Go_Accepted的博客-优快云博客_c#迭代器调原创 2022-06-16 17:22:03 · 660 阅读 · 0 评论 -
C#:装箱跟拆箱
C#的装箱与拆箱的本质应该就是类型的强转。进一步细分的话就是值类型与引用类型之间的强转。在理解装箱跟拆箱之前先要理解一下什么是值类型,什么是引用类型。这个课参考:C# 值类型与引用类型 - 简书c#基础系列之值类型和引用类型的深入理解c#引用类型和值类型以C++进行类比,简单地将其理解的话那就是:值类型是不用new创建的对象,分配在栈;引用类型则是用new创建的对象(本质是一个指针),分配在堆。可参考:C++用new和不用new创建类对象区别_banbanlin的博客-优快云博客_new 指针1.首先,最原创 2022-06-15 16:50:33 · 356 阅读 · 0 评论 -
C#:struct与class的区别
struct类型定义的变量是值类型,class定义的变量是引用类型。因此struct类型定义的对象是分配在栈上面的,而class定义的对象是分配在堆上的。举例:因此struct不能被继承也无法继承其他,因此其成员也不能指定为 abstract、virtual (毕竟被密封了,无法实现虚函数跟抽象函数)。但是struct可以实现接口。4.struct中无法重载默认构造函数5.关于对象的初始化1)结构体中的变量是不能在结构体中直接赋初始值的,类的变量成员可以。2)当使用 New原创 2022-06-13 15:40:21 · 386 阅读 · 0 评论 -
C#使用多重的字典Dictionary
使用多重字典是我在需要使用多重判断进行赋值时候想到的一个使用办法,而使用字典来取代多重判断可以减少代码量以及效率,但是会增加空间。所以其本质是通过空间来换取效率。怎么理解我说的东西呢?加入需要四个bool才能确定某个值,那么一共会有16种情况,用if语句会变得很长,而且还需要四层判断。好了,讲了这个来讲讲怎么给多重字典赋值。先来个两重字典。 //定义字典 Dictionary<string, string> openWith = new Dictionary<原创 2021-07-07 22:04:05 · 3015 阅读 · 0 评论 -
C#反射获取一个类的所有属性
Type type = typeof(rt); FieldInfo[] fields = type.GetFields(); foreach (FieldInfo f in fields) { Debug.Log(f); // + " " + "属性 " + f.Attributes Debug.Log(f.Name); Debug.Log(f.FieldType); }原创 2021-04-22 15:53:42 · 442 阅读 · 0 评论