![](https://img-blog.csdnimg.cn/20190901151754712.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
C#
雨牧_
这个作者很懒,什么都没留下…
展开
-
C#格式化器如何序列化类型实例
为了简化格式化器的操作,FCL在System.Runtime.Serialization命名空间提供了一个为了简化格式化器的操作,FCL在System.Runtime.Serialization命名空间提供了一个FormatterServices类型。该类型只包含静态方法,而且该类型不能实例化。以下步骤描述了格式化器如何自动序列化类型应用了SerializableAttribute 特性的对象:格式化器调用FormatterServices的GetSerializableMembers方法: p原创 2020-05-17 14:18:00 · 231 阅读 · 0 评论 -
C#的垃圾回收算法到底做了什么
应用程序调用 new 操作符创建对象时,可能没有足够的地址空间来分配该对象。发现空间不够,CLR(公共语言运行库,是整个.NET框架的核心,它为.NET应用程序提供了一个托管的代码执行环境。)就会执行垃圾回收。对于对象生存期的管理,有的系统采用的是某种引用计数算法。事实上,Microsoft自己的“组件对象模型”(Component Object Mode,COM)用的就是引用计数。在这种系统中...原创 2020-04-21 16:08:06 · 334 阅读 · 0 评论 -
由简单例子了解C#中的委托和Lambda表达式
最近一直在实习,觉得自己的基础还是不行,遇到复杂的代码还是很不容易理解,于是又重温了《C#本质论》,便写下了这篇笔记。委托(delegate):允许像处理其他任何数据一样处理对方法的引用。Lambda表达式:可以快速和简单地创建自定义委托。委托C/C++中允许程序员利用”函数指针“将对方法的引用作为实参传递给另一个方法。C#则使用委托提供了相同的功能。委托允许捕捉对方法的引用,并像...原创 2019-12-15 11:09:50 · 319 阅读 · 0 评论 -
C#中的空接合操作符(??)和null条件操作符(?.)
空接合操作符(null coalescing operator) ?? 能简单地表示“如果这个值为空,就使用另一个值”。其形式如下:expression1 ?? expression2??操作符支持短路求值。如果expression1不为null, 就返回expression1的值, 不对另一个表达式求值。如果expression1求值null,就返回expression2的值。 和条件操...原创 2019-11-02 10:39:36 · 1130 阅读 · 0 评论 -
C#字符串是不可变的
string类型的关键特征是在于它是不可变的(immutable)。可以为string变量赋一个全新的值,但出于性能方面考虑,没有提供修改字符串内容的机制。所以不可能将字符串中的字幕全部转换为大写。只能新建字符串,让它成为旧字符串的大写字母版本,但旧字符串在这个过程中不会被修改。代码1:错误,string是不可改变的static void Main(string[] args){ ...原创 2019-10-26 11:50:49 · 849 阅读 · 0 评论 -
C#中的字符串差值
基本例子创建了两个int变量:foo和bar。int foo = 34;int bar = 42;string resultString = $"The foo is {foo}, and the bar is {bar}.";Console.WriteLine(resultString);输出:The foo is 34, and the bar is 42.表达式...原创 2019-10-24 23:18:08 · 806 阅读 · 0 评论 -
C#中partial关键字的作用
partial关键字告诉C#编译器:类,结构或借口的定义源代码可能要分散到一个或多个源代码文件中。将类型源代码分散到多个文件的原因有三:1.源代码控制:假定类型定义包含大量源代码,一个程序员把它从源代码控制系统中签出(checkout)以进行修改。没有其他程序员能同时修改这个类型,除非之后执行合并(merge)。使用partial关键字可将类型的代码分散到多个源代码文件中,每个文件都可...原创 2019-09-23 17:06:28 · 638 阅读 · 0 评论 -
C#中的拆箱与装箱
由于C#中所有的数据类型都是由基类System.Object继承而来的,所以值类型和引用类型的值可以通过显式(或隐式)操作相互转换,而这转换过程也就是装箱(boxing)和拆箱(unboxing)过程。装箱: 是值类型到 object 类型或到此值类型所实现的任何接口类型的隐式转换。对值类型装箱会在堆中分配一个对象实例,并将该值复制到新的对象中。拆箱: 是从 object 类型到值类型...原创 2019-09-21 11:04:12 · 278 阅读 · 0 评论 -
我们为什么要使用空接口
FxCop设计规则中的第三条提供了对空接口的检查.下面是它的描述:一个接口提供了一组行为和使用契约(usage contract),任何一个类型都可以实现这个Interface, 而不需要考虑这个类型的继承层次。一个类型通过实现接口的成员而实现这个接口。一个空的接口没有定义任何成员,因此,也就没有任何契约能够被实现。如果你的设计包含一个空的接口,并且希望一些类型实现这个接口,你很可能希望使...转载 2019-08-22 11:03:24 · 1468 阅读 · 0 评论 -
C#常用设计模式(Unity)——游戏场景的转换——状态模式(State)
此文章原文来源于《设计模式与完美游戏开发》(蔡升达著),笔者只是在学习过程中受益颇多,从而进行了总结,有兴趣的读者可以去阅读原书。1.场景的转换当游戏比较复杂的时候,通常会设计多个场景,让玩家在几个场景之间切换,某一个场景可能是角色在一个大地图上行走,另一个场景则可能是在洞穴探险,这样的设计方式类似于舞台剧,一幕幕的呈现,但对于观众来说,同一时间只能看到演员在某一个场景中的演出。当我们...原创 2019-05-30 19:42:00 · 3015 阅读 · 0 评论 -
C#冒泡排序与快速排序比较
今天是开篇,得要吹一下算法,算法就好比程序开发中的利剑,所到之处,刀起头落。针对现实中的排序问题,算法有七把利剑可以助你马道成功。首先排序分为四种: 交换排序: 包括冒泡排序,快速排序。 选择排序: 包括直接选择排序,堆排序。 插入排序: 包括直接插入排序,希尔排序。 合并排序: 合并排序。那么今天我们讲的就是交换排序,我们...转载 2019-05-18 17:02:22 · 441 阅读 · 0 评论 -
C#socket编程——TCP协议和UDP协议的区别
TCP协议:基于Tcp协议的Socket通讯类似于B/S架构,面向连接,但不同的是服务器端可以向客户端主动推送消息。使用Tcp协议通讯需要具备以下几个条件: (1).建立一个套接字(Socket) (2).绑定服务器端IP地址及端口号--服务器端 (3).利用Listen()方法开启监听--服务器端 (4).利用Accept()方法尝试与客户端建立一...原创 2019-05-18 16:30:13 · 1394 阅读 · 0 评论 -
C#socket编程——UDP协议创建服务器端和客户端并进行通信
上次利用代码在一台电脑实现了TCP协议创建服务器端和客户端并进行通信,这次我们来用UDP协议进行实现。(建议先了解TCP协议如何实现数据传输)(传送门:https://blog.csdn.net/wang568270833/article/details/89764756)TCP协议和UDP协议有什么区别呢?这里先简单的说一下,TCP协议在收发数据之前有一个连接的功能,就是在服务器端调用A...原创 2019-05-12 22:37:28 · 3706 阅读 · 0 评论 -
C#socket编程——TCP协议创建服务器端和客户端并进行通信
我们做网络通信的时候需要有通信协议,在进行socket编程的时候有两种通信协议TCP、UDP,这次我们就用简单的方式在一台电脑建立TCP协议的服务器端和客户端并使之进行通信。服务器端和客户端进行连接,第一步就行在服务器端创建一个socket,开始监听客户端的连接,然后在客户端创建一个socket,向服务器端发起连接,这样连接建立起来之后就可以进行数据的交换。由于Visual Studio一...原创 2019-05-02 22:14:18 · 13951 阅读 · 4 评论