随笔分类 - 读书笔记-服务端
【C#进阶系列】11 事件
摘要:事件,定义了事件成员的类型允许类型或类型的实例通知其它对象发生了特定的事情。 按照我自己的理解而言,事件可以被(方法)关注,也可以被(方法)取消关注,事件发生后关注了事件的一方会了解到,并对事件做出相应的应对(执行方法)。(我每次都是这么理解的,这样从字面意义上更好理解一点) 众所周知,事件实际上就
阅读全文
【C#进阶系列】10 属性
摘要:属性分为无参属性和有参属性(即索引器)。 属性相对于字段的优点不仅仅是为了封装,还可以在读写的时候做一些额外操作,缓存某些值或者推迟创建一些内部对象,也适用于以线程安全的方式访问字段。 话说最基本的属性就不讲了,太平常了。 基本上很多文章都是讲属性的好处的,所以下面就讲一下属性的不足: 属性不能作为
阅读全文
【C#进阶系列】09 关于参数的故事
摘要:可选参数和命名参数 不多说,上代码,自然懂 class Program { static void Main(string[] args) { var troy = new Troy(); troy.HelloWorld(1);//此时b和c都为0 troy.HelloWorld(1,2);//此时
阅读全文
【C#进阶系列】08 方法
摘要:实例构造与引用类型 之前的章节其实已经写过了引用类型的构造过程: 首先当然是,在堆中,为引用类型的实例对象分配内存,然后初始化对象的附加字段(即类型对象指针和同步块索引)。 这个时候为对象分配的内存都是直接被置为0的,所以如果所用到的构造器中没有对对象中的一些字段做处理,那么这些字段的初始值都应该为
阅读全文
【C#进阶系列】07 常量和字段
摘要:常量 常量总是被视为静态成员。 常量其实可以不限于基元类型,但是必须初始化为null。(我觉得这个点知道和不知道都一样,我已经自动从脑海中忽略了。很多时候在我这个人眼中,艰涩的代码和垃圾代码,其实没有任何区别。很讨厌明明有更简单易懂的解决方案,非要去炫一些生僻无用的技术的程序员,总是喜欢用这种方式让
阅读全文
【C#进阶系列】06 类型和成员基础
摘要:这些东西是基础中的基础,基本上是本书都会讲这个。但是很多东西到处都有,所以只捡了以下的这些写下来。 关于类型的可见性和可访问性 也就是public,internal这种东西,但是还是有个东西要提一下,那就是友元程序集。 利用System.Runtime.CompilerServices中的Inter
阅读全文
【C#进阶系列】05 基元类型、引用类型和值类型
摘要:基元类型和FCL类型 FCL类型就是指Int32这种类型,这是CLR支持的类型。 而基元类型就是指int这种类型,这是C#编译器支持的,实际上在编译后,还是会被转为Int32类型。 而且学过C的朋友肯定记得,int在32位机器和64位机器字节数可能不同,但是C#.NET里int就是表示Int32。
阅读全文
【C#进阶系列】04 类型基础
摘要:关于System.Object 所有类型都从System.Object派生而来。 System.Object的公共方法中ToString()一般是返回对象的类型的全名,只有Int32这些类型将其重写后,新方法才会返回其值的字符串表示。 其中还有两个受保护的方法: MemberwiseClone:深复
阅读全文
【C#进阶系列】03 配置文件管理与程序集的引用版本重定向
摘要:先来点与标题不相关的: CLR支持两种程序集:弱命名程序集和强命名程序集。 两者的区别在于强命名程序集使用发布者的公钥和私钥进行签名。由于程序集被唯一性地标识,所以当应用程序绑定到强命名程序集时,CLR可以应用一些已知安全的策略。 程序集可以采用两种方式部署:私有或者全局。弱命名程序集只能以私有方式
阅读全文
【C#进阶系列】02 PE文件,程序集,托管模块,元数据——还是那个Hello world
摘要:好了,还是这张图,还是一样的Hello world。 因为本章其实很多都是讲一些命令行编译啊什么鬼的配置类的东西,要用的时候直接百度或者回头查书就可以了, 所以了解一下也就行了,也没有记录下来,接下来讲得只是我认为很有用的东西。 关于引用 请看上图,MyTest程序集下面有个引用,引用里面大家都知道
阅读全文
【C#进阶系列】01 CLR的执行模型——一个Hello World的故事
摘要:好吧,废话少说,先上一章Hello World图: 我们有了一个Hello world程序,如此之简单,再加上我今天没有用汉字编程o(>﹏<)o,所以一切很简单明了。 故事开始: 编译: 一个程序写完肯定要编译,以前什么C啊什么的都是编译成本机的CPU指令,但是我们的C#不是。 C#,VB.NET都
阅读全文
【C#进阶系列】00 序
摘要:老早就被各种推荐《CLR via C#》这本书了,然而一直没去学。 因为工作中所需要的.NET功底目前算是足以应付了,而前端却不熟,所以跑去学了一段时间前端的知识。 终于算是把前端方面的基础学习计划完成,工作中也完全有能力应付了,有时间来看看这本神书了。 依然像以前一样买了本实体书,看了看,有700
阅读全文
【重构学习】12 重构学习感想
摘要:其实也没什么想继续说重构了,你我都清楚这仅仅只是一个开始,进一步的就是靠个人去不断积累重构经验了。 我们学到的依然只是套路,玩熟的话还远着呢。 不仅仅是何处重构,如何重构的问题,更需要对重构的时间进行掌控,并且迫切需要实施重构的勇气。 好吧,自学完了《重构》。 用时18天。 从来没有如此兴奋过,这一
阅读全文
【重构学习】11 大型重构
摘要:好了,前面所有的都是很简单的例子,现在开始的是大型重构。 对于大型重构来说,情况复杂多变,耗时也会很长,前面的简单重构大多是在一个小时内可以完成,但是对于大型重构来说可能需要几个月,甚至数年。如果是一个运行中的系统,重构起来只能每天一点点去慢慢重构。 (恕我直言,在国内恐怕这样的公司也很少。所以我们
阅读全文
【重构学习】10 继承关系的重构
摘要:1、字段上移 修改点:两个子类拥有相同的字段 做法:将该字段移至父类 2、函数上移 修改点:有些函数,在各个子类中产生完全相同的效果 做法:将该函数移至父类 有一种特殊情况也需要这么做:子类函数覆盖了父类的,但是仍然做着相同的工作 在此重构中你可能会遇到一种情况,就是你提炼的函数调用了子类有而父类没
阅读全文
【重构学习】09 函数调用的重构
摘要:之前写了个函数的重构,这里写的是函数的调用的重构,不同哦,是为了写出让别人好调用的函数(或接口)。 1、函数改名 修改点:函数的名称未能提示函数的用途。 做法:修改函数的名称 如果你想给函数写上一句什么注释,那么你就把这个注释想办法作为名称写上好了。 Martin原话: 你可能无法第一次就取一个好名
阅读全文
【重构学习】08 条件表达式的重构
摘要:所谓条件表达式,就是分支语句,去掉分支语句咯 1、分解条件表达式 修改点:你有一个复杂的条件语句(就是if else语句) 做法:将条件表达式的三个部分分别提炼出独立函数 即 if (A部分) { B部分; } else { C部分; } 这三个部分都提炼成函数就好了。 2、合并条件表达式 修改点:
阅读全文
【重构学习】07 数据的重构
摘要:这里的数据指的大概就是字段(貌似这章有些东西也是过时了,因为现在的.NET已经发展了很久了,包括Java也是) 1、自封装字段(其实就是属性啦,过时了) 修改点:直接访问字段,但是与字段间的耦合关系逐渐变得笨拙 做法:为这个字段建立一个取值/设值函数,并且只以这些函数来访问数据 好吧,现在明白属性是
阅读全文
【重构学习】06 类的重构
摘要:好吧,这一章要不要自己写一段示例代码考虑了很久,貌似还是不写的好,因为感觉这一章异常的简单 这一章就是关于类的方法和字段并不合理,所以在搬移方法和字段1、搬移函数 修改点:一个函数与其所在类外的另一个类进行了过多的交流,调用后者或被后者调用 动机:因为出现上述情况,就会出现高度耦合, 做法:在该函数
阅读全文
【重构学习】05 函数的重构
摘要:《重构》这本书的代码都是java,我准备用C#来一遍。 而今天我的主要任务是写一大段垃圾代码出来,然后重构(仅限于函数的,不涉及到其它方面的重构)。 程序界面: 功能介绍: 侠客名字自己取,然后点击按钮随机角色的属性, 根骨,经脉,柔韧,悟性等四项属性值都是随机而来。 其他的都是由这四个属性计算而来
阅读全文