C# .net
文章平均质量分 79
C# .net的一些相关记录
天富儿
这个作者很懒,什么都没留下…
展开
-
UnityC#的lock用法简记
多线程环境中,不使用`lock`锁,会形成竞争条件,导致错误。使用`lock`锁可以保证当有线程操作某个共享资源时,能使该代码块按照指定的顺序执行,其他线程必须等待直到当前线程完成操作。原创 2023-01-19 18:11:56 · 3067 阅读 · 0 评论 -
C#泛型与委托中的协变out与逆变in简记
引用类型支持泛型类型参数中的协变和逆变,但值类型不支持它们。仅在类型定义方法参数的类型,而不是方法返回类型时,类型可以在泛型接口或委托中声明为逆变。数组的协变使派生程度更大的类型的数组能够隐式转换为派生程度更小的类型的数组。在泛型委托中,如果类型仅用作方法返回类型,而不用于方法参数,则可以声明为协变。在泛型委托中,如果类型仅用作方法参数,而不用于方法返回类型,则可以声明为逆变。分配相同类型的其他委托,不过要使用派生程度更大的泛型类型参数。分配相同类型的其他委托,不过要使用派生程度更小的泛型类型参数。原创 2023-01-10 17:56:41 · 2463 阅读 · 1 评论 -
C#访问修饰符
为了控件C#中的对象的访问权限,定义对象时可以在前面添加修饰符。private(私有的),protected(受保护的),internal(程序集内部的),public(公开的),以及(只有本程序内或者继承于该类的类型可以访问)。namespace(命名空间),class(类),struct(结构),enum(枚举),interface(接口),delegate(委托),function(函数),变量。public:访问不受限制,是权限最多的一个修饰符,namespace和enum成员、...原创 2022-08-18 18:07:45 · 2325 阅读 · 0 评论 -
Unity使用的C++动态库回调C#函数
Unity使用的C++动态库回调C#函数引言C++C#参考链接引言之前分享了一个文章:Unity显示C++动态库中的Log,其中使用到的主要能力就是,由C++动态库回调C#函数达到的。这里我再对该功能进行专门的记录,并使用上面的这个文章做例子。C++首先,C++动态库中,先声明一个函数指针。typedef void (*Log)(char* message, int iSize);接着声明一下该指针类型的变量。Log g_log;如果需要将从C#传过来的函数地址全局保存,让其他的类都可原创 2021-12-31 15:23:56 · 3158 阅读 · 1 评论 -
C#多线程之子线程与主线程之间的通信
在做多线程传递消息是发生报错,查找到这个方法,可以使用。特此保存:先说明一下,本人最近遇到了什么问题,就是在写写消息队列的时候,发现消息队列每次接收一个消息的时候都是创建了一个新的线程。这样就导致了消息处理的时候没有在主线程上进行,然而其中的一些步事项是要通过主线程才能操作的。这样就引出了一个子线程怎么去通知主线程要做哪些事情呢?为了解决上面的问题我找了好的多资料,好多都是用委托,去解决了,然后我又看了我的项目通过这种beginInvoker的这种办法解决不是很好用。并不能解决的当前的问题,在这个原创 2021-10-12 16:56:54 · 1364 阅读 · 0 评论 -
C#多线程之取消令牌:CancellationToken
C#多线程之取消令牌:CancellationToken介绍任务被取消时执行某个操作延时取消,对长时间阻塞调用的异步取消令牌应用`CancellationToken`的链式反应创建链式测试代码原文链接介绍为什么需要CancellationToken?因为Task没有方法支持在外部取消Task,只能通过一个公共变量存放线程的取消状态,在线程内部通过变量判断线程是否被取消,当CancellationToken是取消状态,Task内部未启动的任务不会启动新线程。取消令牌(CancellationToken)转载 2021-08-12 17:51:22 · 10859 阅读 · 0 评论 -
C#的WebSocket使用简记
C#的WebSocket使用简记`ClientWebSocket`属性方法代码`async/await`参考链接ClientWebSocket这里用到的核心代码就是ClientWebSocket类。提供用于连接到WebSocket服务的客户端。程序集:System.Net.WebSockets.Client.dll;命名空间:System.Net.WebSockets;继承:Object—>WebSocket—>ClientWebSocke;csharp public seal原创 2021-08-12 17:41:14 · 9373 阅读 · 1 评论 -
C#运算符重载----关键字operator
C#运算符重载----operator运算符重载的实现可重载和不可重载运算符实例原文链接您可以重定义或重载**C#**中内置的运算符。因此,程序员也可以使用用户自定义类型的运算符。重载运算符是具有特殊名称的函数,是通过关键字operator后跟运算符的符号来定义的。与其他函数一样,重载运算符有返回类型和参数列表。例如,请看下面的函数:public static Box operator+ (Box b, Box c){ Box box = new Box(); box.length =转载 2021-08-06 14:01:42 · 1663 阅读 · 0 评论 -
C# async/await异步编程
C# async/await异步编程前言异步方法的结构调用异步方法异步方法本体耗时函数`async`/`await`异步函数的原理示例代码的执行流程带返回值的异步函数死锁这样没省多少事啊?参考:前言Talk is cheap, Show you the code first!先上代码:private void button1_Click(object sender, EventArgs e){ Console.WriteLine("111 balabala. My Thread ID is转载 2021-07-26 16:41:49 · 1462 阅读 · 0 评论 -
C# Enum,Int,String的互相转换
C# Enum,Int,String的互相转换Enum-->StringString-->EnumEnum-->IntInt-->EnumEnum为枚举提供基类,其基础类型可以是除Char外的任何整型。如果没有显式声明基础类型,则使用Int32。编程语言通常提供语法来声明由一组已命名的常数和它们的值组成的枚举。注意:枚举类型的基类型是除Char外的任何整型,所以枚举类型的值是整型值。Enum提供一些实用的静态方法:比较枚举类的实例的方法;将实例的值转换为其字符串表示形式转载 2021-04-12 13:03:16 · 294 阅读 · 0 评论 -
ref和out的区别
C#:ref和out的区别概述`ref``out`在C#中通过使用方法来获取返回值时,通常只能得到一个返回值。因此,当一个方法需要返回多个值的时候,就需要用到ref和out。概述ref关键字使参数按引用传递。其效果是,当控制权传递回调用方法时,在方法中对参数所做的任何更改都将反映在该变量中。若要使用ref参数,则方法定义和调用方法都必须显式使用ref关键字。out关键字会导致参数通过引用来传递。这与ref关键字类似,不同之处在于ref要求变量必须在传递之前进行初始化。若要使用out参数,方法定义和调转载 2021-03-24 16:00:10 · 906 阅读 · 0 评论 -
Unity读取TXT文本文件
Unity读取TXT文本文件读取解析读取Unity的文本读取,可以分成四种方式:使用TextAsset类。在程序脚本中,以字段public TextAsset text;的形式,直接在Inspector面板中拖动赋值。在之后的程序中,使用text.text;就可以获得文本中的内容。使用Resources.Load加载方式。Resources.Load我们通常是用于预制体(GameObject)的加载,但其实Resources.Load可以加在很多种类的资源,只要是在Resources文件原创 2020-11-17 23:20:37 · 12346 阅读 · 1 评论 -
文件夹操作:DirectoryInfo类与Directory类
文件夹操作:DirectoryInfo类与Directory类引子DirectoryDirectoryInfo`DirectoryInfo`类的属性说明`DirectoryInfo`类的实例方法说明`Directory`类和`DirectoryInfo`类的区别参考链接引子项目中需要一个功能是获取文件夹下的所有文件。我的想法是:如果资源有添加或更新时,我就可以通过这个功能再进行后续的操作。代码如下:var files = Directory.GetFiles(filepath);for (int i原创 2020-11-16 15:28:27 · 4970 阅读 · 0 评论 -
C#之数组、ArrayList和List三者的区别
C#之数组、ArrayList和List三者的区别数组ArrayList泛型List总结在C#中数组,ArrayList,List都能够存储一组对象,那么这三者到底有什么样的区别呢。数组数组在C#中最早出现的。在内存中是连续存储的,所以它的索引速度非常快,而且赋值与修改元素也很简单。//数组string[] s=new string[2]; //赋值s[0]="a";s[1]="b";//修改s[1]="a1";但是数组存在一些不足的地方。在数组的两个数据间插入数据是很麻烦的,而且转载 2020-10-27 14:48:01 · 552 阅读 · 1 评论 -
Framework类库
Framework类库简介.Net Framework类库包含Framework类库(Framework Class Library,FCL)。FCL是一组DLL程序集的统称,其中含有数千个类型的定义,每个类型都公开了一些功能。MS还发布了其它库,比如MS还发布了Windows Azure SDK和DirectX SDK,这些库提供了更多的类型。公开了更多的功能。Framework类库作用通过Framework类库可以创建以下应用程序:命名空间简介由于FCL包含的类型数量实在太多,所以命名空间这转载 2020-10-27 14:38:08 · 513 阅读 · 0 评论 -
装箱和拆箱的相关简记
装箱和拆箱装箱拆箱尽量避免拆箱和装箱重载泛型方法`ToString`提前显式装箱装箱与拆箱(又叫取消装箱)就是值类型与引用类型的转换,是值类型和引用类型之间的桥梁。之所以可以这样转换是因为CTS允许这样做。只有值类型才存在装箱和拆箱。装箱是隐式的,拆箱是显式的,因为你需要告诉CLR你要给拆出来的值赋予什么类型。通过深入了解装箱与拆箱的过程,我们可以知道其中包含了对堆上内存的操作,故会消耗性能,这是完全不必要的。另外值得注意的是,装箱需要比原数据更多的空间,因为它需要两个引用类型的标准配置:类型对象原创 2020-10-27 14:28:04 · 443 阅读 · 0 评论 -
CTS、CLS和CLR
CTS、CLS和CLRCLR:公共语言运行库CTS:通用类型系统CLS:公共语言规范代码总结CTS、CLS和CLR是.NET框架的基本概念,但往往成为程序员们忽视的部分。清楚理解三者的概念,有助于.NET程序员编写高效安全的.NET程序。所涉及到的知识点:NET的基本概念CLS、CTS和常用语言的关系CLR:公共语言运行库CLR的全称是公共语言运行库(Common Language Runtime),读者可以把CLR理解为一个包含运行.NET程序的引擎和一堆符合公共语言基础结构的类库的集合。转载 2020-10-27 11:29:42 · 1775 阅读 · 0 评论 -
C#中Equals和==(等于号)的比较
@TOC相信很多人都搞不清Equals和==的区别,只是零星的懂一点,现在就让我带大家来进行一些剖析。值类型的比较对于值类型来说 两者比较的都是”内容”是否相同,即 值 是否一样,很显然此时两者是划等号的。例:int i = 9;int j = 9;Console.WriteLine("Equals和= =(等于号)的比较");Console.WriteLine("i.Equals(j) :" + i.Equals(j));Console.WriteLine("i==j " + (i =转载 2020-09-27 22:06:17 · 340 阅读 · 0 评论 -
C#散列加密算法
创建散列码的方法非常多,即使是同一种散列算法也可以通过许多类来实现,前面章节介绍的算一种,下面再介绍一种。以 SHA1 为例:string plaintext = "明文";byte[] srcBuffer = System.Text.Encoding.UTF8.GetBytes(plaintext);System.Security.Cryptography.HashAlgorithm hash = System.Security.Cryptography.HashAlgorithm.Create("转载 2020-09-08 12:25:58 · 607 阅读 · 0 评论 -
非对称密钥密码算法代码简记(RSA)
非对称密钥密码算法代码简记(RSA)算法简介代码示例代码原文链接算法简介链接如下:https://blog.csdn.net/f_957995490/article/details/108413226代码示例使用的是RSA算法://获取密钥和公钥public void RSAKey(out string xmlKeys, out string xmlPublicKey){ try { RSACryptoServiceProvider rsa = new RSA转载 2020-09-07 14:44:32 · 704 阅读 · 0 评论 -
AES对称加密算法简记(三)
AES对称加密算法简记(三)对称加密算法的使用==核心步骤代码==具体的使用方法加密解密AssetBundle数据加密解密网络数据参考链接其他相关链接可做参考对称加密算法的使用这里使用的是C#的加密算法库System.Security.Cryptography。下面先看一下核心代码示例,这里用的是AES算法;再下面的例子用的是Rijndael算法。其余算法与AES/Rijndael的用法步骤相同,便不做记录。核心步骤代码byte[] key = Encoding.UTF8.GetBytes(KEY原创 2020-09-07 14:37:31 · 1238 阅读 · 0 评论 -
.net中C#命名空间System.Security.Cryptography简记
.net中C#命名空间System.Security.Cryptography简记前言System.Security.Cryptography==核心步骤代码==加密算法对称加密算法DESTripleDESAES/RijndaelRC2RC4具体使用方法加密网络数据非对称加密算法RSADSA加密哈希算法(散列算法)MD5SHA-1RIPEMD160SHA-256/384/512参考链接官方介绍链接前言最近在看加密相关的文章,这里做个总结记录,为了以后使用。文中主要使用AES/Rijndael算法举例。其原创 2020-09-05 01:17:38 · 5279 阅读 · 0 评论 -
C#互斥锁Mutex类的用法
C#互斥锁Mutex类的简单用法作用用法代码相关链接作用C#中Mutex是互斥锁,位于System.Threading命名空间中。顾名思义,它是一个互斥的对象,同一时间只有一个线程可以拥有它,该类还可用于进程间同步的同步基元。如果当前有一个线程拥有它,在没有释放之前,其它线程是没有权利拥有它的。我们可以把Mutex看作洗手间,上厕所的人看作线程;上厕所的人先进洗手间,拥有使用权,上完厕所之后出来,把洗手间释放,其他人才可以使用。用法线程使用Mutex.WaitOne()方法等待C#Mutex对象转载 2020-08-19 21:23:16 · 1164 阅读 · 0 评论 -
C#类的构造函数调用其他构造函数
C#类的构造函数调用其他构造函数其实就是使用this来实现的。看一下例子就会明白的了。public class Class1{ public Class1() { //Code 1 } public Class1(string s) : this() { //Code 2 } public Class1(int i, string j) : this(j) { //Code 3 }转载 2020-08-19 10:13:33 · 553 阅读 · 0 评论 -
设计模式之单例模式(Singleton Pattern)简记
设计模式之单例模式(Singleton Pattern)简记创建原则使用位置懒汉模式 vs 饿汉模式示例反射与泛型内部类单例模式懒汉线程并不安全参考链接创建原则保证一个类只有一个实例,并提供全局访问点。使用位置要求生产唯一序列号。WEB 中的计数器,不用每次刷新都在数据库里加一次,用单例先缓存起来。创建的一个对象需要消耗的资源过多,比如 I/O 与数据库的连接等。懒汉模式 vs 饿汉模式懒汉模式:很懒。在调用的时候才会创建单例。(延迟加载)饿汉模式:很饿。在系统加载的时候就会创建单例原创 2020-08-19 00:26:04 · 316 阅读 · 0 评论 -
C#调用C++数据类型对应
C#调用C++数据类型对应cl.exe/Gz参数指定编译为`__stdcall`调用方式,默认为`__cdecl`C#中的`char`是两个字节C++==dll==类型与C#类型对应关系C#调用C++dll的几种传参方式原文链接C#调用非托管C++的dll传入Stringbuilder、ref string、ref char等都报错,如mscorlib.dll异常、其他信息: 尝试读取或写入受保护的内存。这通常指示其他内存已损坏 等等,后来发现是dll生成后一直没更新,放错位置了。。。 = =||不过也转载 2020-08-18 00:03:23 · 3231 阅读 · 0 评论 -
详解(C#) .NET反射中的BindingFlags以及常用的BindingFlags使用方式
@[toc](详解(C#) .NET反射中的BindingFlags以及常用的BindingFlags使用方式)使用 .NET 的反射 API 时,通常会要求我们传入一个BindingFlags参数用于指定反射查找的范围。不过如果对反射不熟的话,第一次写反射很容易写错导致找不到需要的类型成员。本文介绍BindingFlags中的各个枚举标记的含义、用途,以及常用的组合使用方式。所有的BindingFlags默认值// 默认值Default查找这些标记用于反射的时候查找类型成员:// 表示转载 2020-08-07 23:36:38 · 5073 阅读 · 1 评论