C#基础
文章平均质量分 95
C#
MeiGaZaMu
弟中弟中弟中弟中弟
展开
-
C# 学习笔记:反射
这篇文章重新写反射,在很久之前的那一篇博客中曾经非常粗劣的描述了一下反射的基础用法(感觉跟没讲一样),这一篇博客我们重新归纳一下反射,就像彩虹六号中重置赫里福基地一样。反射这个功能来自于代码中的加载需求,因为我们代码中一个程序往往会有很多配套的程序集,这些程序集往往不是自己熟悉甚至自己见过的,它们可能来自于公司的另一个部门或者其他公司,也有可能在我们程序本体发布以后才发布的这些程序集,所以我们...原创 2019-12-22 15:33:59 · 867 阅读 · 0 评论 -
C# 设计模式:行为型
这篇博客我们写行为型模式,应该算是最后一篇设计模式的博客了吧,相较于上一篇结构型有的模式写的比较水(组合模式、适配器模式),这篇博客大部分例子都是自己原创的(然后这篇博客的用时就超标了),算是自己的一个“救赎”吧,不过迭代器模式我没写,因为我觉得之前用了三篇博客来写迭代器以及迭代器实现的集合以及很足够了。嗯,总是是请各位看官多多批评指正。模板方法模式:定义一个操作中的算法骨架(抽象...原创 2019-11-09 21:32:48 · 582 阅读 · 0 评论 -
C# 学习笔记:集合
集合是一个很基础的东西,这篇博客会把集合及其背后的实现好好梳理一下:对于所有的集合来说,都需要实现IEnumerable和IEnumerator接口,这两个接口在我们之前的迭代器那一篇博客里已经讲过了,在我们自己实现的手动迭代器里,其内部正是通过数组来进行迭代的管理的,我们今天的博客也从数组讲起:数组数组是将多个数据项当做一个集合来处理的机制。在C#中,所有的数组都派生自Syst...原创 2019-11-05 21:35:40 · 465 阅读 · 0 评论 -
C# 学习笔记:多线程
多线程是学习编程语言绕不开的东西,我们常常可以看到,代码是一条龙走下来的,电脑从上到下依次执行,这种编译器读取代码的一种行为,我们可以认为电脑给我们开了个“流水线”来专门处理我们的代码。这个“流水线”的专业名称就叫线程。那么由此引申,电脑开了好几个“流水线”我们可以把它称为:多线程。进程与线程我们打开任务管理器就可以看到电脑当前正在运行的所有的进程。这些进程也就是我们平常使用的程序在运...原创 2019-10-30 21:18:13 · 360 阅读 · 0 评论 -
C# 设计模式:结构型
这一节写结构型模式,正如上篇所见,上文中的“创建型”设计模式都是针对不同情况下一个类对象如何创建(new)更为合适。那么,这一篇所写的“结构型”就是针对于代码的结构的设计模式。照例上图:那么今天写的模式有:装饰模式、外观模式、适配器模式、组合模式、桥接模式、享元模式、代理模式。装饰模式:动态地给一个对象添加额外的装饰《大话设计模式》中,装饰模式的原话是:动态的给一个对象添加额外...原创 2019-10-24 20:49:57 · 456 阅读 · 0 评论 -
C# 设计模式:创建型
开个坑,接下来写完设计模式,其实这个东西一直很重要,但是自己却不重视,直到在很多地方吃了亏才想起来,我之前看起来设计模式有点“无所谓”,好像代码知道具体的技术和知识点就可以包打天下了。一个语言推出的各种各样的语法,特性都是根据代码的需求来的,而设计模式则是需求的规范化和标准化,所以对于一门语言来说,设计模式就是基石,不用设计模式的角度来看我们的代码,那对它一切的理解就是空中楼阁。设计模式有六大...原创 2019-10-16 21:42:57 · 1220 阅读 · 0 评论 -
C# 学习笔记:序列化
序列化在C#中运用的非常多,由于我是学Unity的,Unity中的序列化特性也比较常用,所以这篇文章我们讲讲序列化的用法。在编码时,我们的代码中的对象们都是保存在内存中的。如果我们关闭一个软件,那么里面的内容就随着进程的消失而消失了。我们之前保存一个类,可以使用反射来调用DLL库来生成一个这个类的对象。但是如果说是代码中的对象的保存,就是需要用序列化相关的API来对代码中的对象进行保存...原创 2019-09-23 20:47:41 · 1440 阅读 · 0 评论 -
C# 学习笔记:垃圾回收
关于C#的垃圾回收,C#与其他更底层的C/C++相比,引入了GC,即垃圾收集器。我们要在堆中创建一个类型,常常要使用new关键字来创建一个在托管堆上的实例,那么我们一个实例既然生出来了,总得要把它们收拾起来,在C++中,需要程序员手动管理内存,通过指针去动态管理。而在dotNet下C#和JVM下java则引入了垃圾收集器,我们平常写的代码生成的实例都是由它来帮我们“擦屁股”的。dotNet...原创 2019-09-15 15:55:21 · 854 阅读 · 0 评论 -
C# 学习笔记(阶段性总结篇):栈、堆
C#中堆栈和堆是一个很基础的概念,很遗憾我现在才来写这个话题。导语Windows使用的是虚拟寻址系统,把程序可用的内存地址映射到硬件内存中的实际地址,在32位处理器上,每个进程都可以使用4GB的内存(无论计算机内部有多少硬盘空间),4GB包含了程序的所有部分,包括了可执行的代码、加载的DLL动态链接库、以及代码中的所有的变量。这4GB的内存称为虚拟内存。在这4GB的每个存储单元都是从...原创 2019-09-05 15:28:18 · 455 阅读 · 0 评论 -
C# 学习笔记:散列与哈希
哈希表我们在C#中,除了数据结构的顺序表链表栈队列之外,还有一个比较重要的就是哈希表,也就是数据结构中的散列表。散列表:建立一个确定的对应关系H,使得每个关键码key都和它唯一的存贮位置H(key)相对应。存储记录时,通过散列函数计算记录的散列地址,并用该地址存储记录。 查找记录时,通过同样的散列函数计算记录的散列地址,并访问该记录。在C#的哈希表(HashTable)是根据关键码...原创 2019-09-02 21:13:27 · 2151 阅读 · 0 评论 -
C# 学习笔记:迭代器:协程
协程是Unity一个刚开始看起来很诡异但是实际用起来很方便的一种用法。在游戏运行的时候,总是需要读秒,我之前写过一个游戏,就是炮塔看见人物就等三秒然后开枪,最开始用Time类去读秒,效果勉强能用,但是炮塔多了之后整个脚本逻辑看起来痛苦不已。但是协程就非常好的实现了读秒、读帧、读逻辑的功能。我们在脚本里实现一遍协程是很简单的,但是协程背后是不容易整明白的。协程的语法对于曾经的我来说特别晦涩。...原创 2019-09-01 17:19:08 · 1127 阅读 · 0 评论 -
C# 学习笔记:迭代器
C#中,如果实现遍历一个数组,除了for循环,还可以是foreach循环。在foreach循环中,我们只需要创建一个同类型的值,来表示我们遍历后的值就可以了。但是实际上,只有实现了IEnumerable接口的类型,才能使用foreach遍历。那么什么是迭代器呢:我们先手动实现以下迭代,我们使用迭代器写个和foreach类似的功能来遍历一个字符串,输出它每个字符。在foreach前面调用它...原创 2019-08-31 20:16:39 · 3338 阅读 · 0 评论 -
C# 学习笔记:委托(5):可变性
这篇文章我们来用一下泛型委托,委托的泛型如果我们用最原始的角度去看,那就是在委托声明后加上一个<T>。但是,关于委托的内容还不止这些,首先先看看C#给开发者自带的两种泛型委托:Action委托:Action委托主要用于无参或者无返回值的委托的委托,那么使用起来非常简单:若有参数,则表示起来就是: class Program { s...原创 2019-08-24 19:40:07 · 243 阅读 · 0 评论 -
C# 学习笔记:反射
最近开始写博客了,这是第一篇。主要讲述最近看的一些资料的关于反射的应用。反射指程序可以访问、检测、修改它本身状态行为的一种能力。通过反射可以获得在运行时的.net中每个类型的成员,包括委托、结构、类、枚举。获得了这些信息,便可以创建相应的对象。反射中最重要的是三个类,当然还有其他的,但一般最主要就这三个Assembly:加载和操作程序集。 Type:得到一个类的类型信息然后还可以...原创 2019-08-20 20:55:44 · 256 阅读 · 1 评论 -
C# 学习笔记:委托(1)
委托是函数指针功能在C#中的实现。委托包装了方法,我们在C#中使用委托来间接调用方法。委托是调用该方法时要操作的对象的包装器。委托是一种类,继承自MulticastDelegate类。它最重要的三个字段分别是:字段 类型 作用 _Target System.Object 改字段为表明委托所在的类或实例对象。 若委托包装静态方法时:此处为n...原创 2019-08-22 11:56:03 · 169 阅读 · 0 评论 -
C# 学习笔记:委托(2)
上篇文章我们讲了委托的父类和多播委托,这篇博客来讲讲委托的回调(Callback)。其实我一直不明白CallBack啥意思,就回调方法。回调方法的具体解释是把方法当做一个参数传入其它方法中,C#代码中,我们可以使用委托实例来包装方法。比如说,我写了个Game类,朋友写了个Load类,他需要我的值来判定登录的是哪个游戏,我这边需要把一个函数的返回值传给他里面,他就需要写一个回调函数来...原创 2019-08-22 20:29:59 · 150 阅读 · 0 评论 -
C# 学习笔记:委托(4):事件(2)
接上一篇,我们了解了事件的一些基础用法和组成结构,这篇写一个完整的事件的例子目前是这样,我是个玩家,然后我想要进入游戏大厅,进入大厅后出发开始游戏的事件,事件分发消息给订阅了事件的游戏启动器。1.事件参数准备:首先我们声明一个玩家类,里面包装了一个字段表明我们玩家的玩家账号名字。 public class Gamer { public string ...原创 2019-08-23 15:14:34 · 250 阅读 · 0 评论 -
C# 学习笔记:委托(6):异步
这次是委托的完结篇。委托的隐式异步调用异步先说说委托的委托的隐式异步调用,也顺便为后面的协程线程迭代器啥的开个头。首先我们先讲一下啥叫异步呢,中文的异步和英文的异步有所不同。中文的同步表示的是“两边同时发生”。相反,英文的异步表示的是:“二者同时独立进行,分支线程不互相等待并发生资源的争抢”这和我们理解的中文“同步”概念是类似的。即中文中的异步等于英文中的同步。中文中的...原创 2019-08-27 16:21:22 · 240 阅读 · 0 评论 -
C# 学习笔记:委托(7):匿名
这是真 最后一章了,写一下委托的匿名函数和Lambda表达式。由于我们在委托中,每一次创建实例都会声明一个方法与之匹配,但如果方法里的逻辑不太复杂,这种每次都要new的操作会让代码变得臃肿,所以C#引入了匿名方法这种机制即为本地函数。匿名方法是用于“简化代码使用”。顾名思义,它是没有函数名的函数。它使用Delegate关键字创建,顾名思义它是给委托使用的,我们来看一个小例子: ...原创 2019-08-27 21:07:42 · 271 阅读 · 0 评论 -
C# 学习笔记:泛型(3):约束
我们如果在泛型方法中创建泛型的实例,我们会发现它自动带了四个方法:这四个方法都是Object里面自动有的方法。由于我们在使用时由于泛型的高度可指定,我们可以为它表明是任何形式,类名、int、string都行,但是我们的自己写的代码逻辑为了执行它的功能,做不到能对任何类型都有很好的兼容,所以我们在指定泛型的类型的时候必须对泛型进行约束。泛型约束泛型的约束语法,在声明泛型的行有:whe...原创 2019-08-28 16:49:20 · 1113 阅读 · 0 评论 -
C# 学习笔记:泛型
泛型对于我来说一直是个心头大患,俗话说得好:人类最古老、最强烈的恐惧是对未知的恐惧。这种恐惧是全方位的,那么我们就从最开始来打破它。泛型之所以让人害怕,主要是它太过于多变,他很像假面骑士Decade,Decade在各大剧场版和ZIO里面都很强,是因为它能变成其他的假面骑士(平成昭和都能变),你刚知道他的招数,他就变成另一个假面骑士使用其他的能力了。就跟我们的泛型一样,能和其他的类型...原创 2019-08-24 14:38:52 · 219 阅读 · 2 评论