读书笔记—CLR via C#章节8-10
前言
这本书这几年零零散散读过两三遍了,作为经典书籍,应该重复读反复读,既然我现在开始写博了,我也准备把以前觉得经典的好书重读细读一遍,并且将笔记整理到博客中,好记性不如烂笔头,同时也在写的过程中也可以加深自己理解的深度,当然同时也和技术社区的朋友们共享
构造函数
- 抽象类默认的构造函数可访问为protected,普通类默认为public
- 派生类默认调用一个基类构造器(如果没有无参构造器,则需要显式调用)
- 不通过构造函数创建对象?
- 静态方法Object.MemberwiseClone,分配内存复制字节
- 运行时序列化
- 不要在构造器中调用会影响所构造对象的任何虚方法,如果虚方法重写,导致无法预测的行为
- 这一点,在java中尤其明显,因为java的内联初始化是在基类初始化之后
- 基类构造函数虚方法指向子类实现,可是子类并没有完全初始化完成,想象一下!
- 构造实例初始化顺序
- 内联初始化(这一点和java不一样)
- 调用基类的构造器
- 调用构造器自己的代码
- 值类型的构造器
- 值类型总是提供默认构造器,所以总是可以实例化
- 由于总是有默认构造器,值类型不允许使用内联初始化语法
- 开发人员无法定义值类型的无参构造器,只能定义带参构造器
- 基于栈的值类型字段都必须在读取之前写入(赋值),并且时全部字段。否则编译出错
- 值类型在构造器中可以给this赋值,而引用类型的this则时只读的
- 类型构造器(静态构造函数)
- static并且强制可访问性为private
- 一个AppDomain中只会执行一次,并且线程安全,适合单例模式
- 值类型中可以定义类型构造器,但是永远不要这么做,为什么呢?
- 手动调用类型构造器 RuntimeHelpers.RunClassConstructor方法
- 构造器应该避免循环依赖
- 值类型不允许使用实例字段的内联初始化,但是静态字段却可以,DateTime就是典型!
- 静态析构器Finalize不存在,只能通过AppDomain.DomainUnload事件进行登记回调
类型构造器的性能考量
- 时机的不确定性
- 访问类的非继承字段或成员前 precise精确语义,时机精确
- 访问静态字段或静态实例\实例方法前或者实例构造器之前,before-field-init语义
- 字段初始化前语义时机不确定,因为CLR保证访问成员前运行静态构造器
- 如果没有显式定义类型构造器,则静态字段使用beforefieldinit标记,否则不使用此标记
- beforefieldinit可以优化调用,但是precise不可以精确调用
- 静态字段只要在访问之前初始化就可以了,时机无所谓。而显式类型构造器可能包含具有副作用的代码,所以需要精确拿捏运行的时机
属性
- 有参属性和无参属性,静态、实例、抽象和虚属性
- 自动属性的缺点
- 初始化默认值
- 序列化
- 调试的支持
- 属性或索引器不可以作为out或ref参数传递
- DateTime.Now是一个错误的设计,为什么?
Tips
- 转型表达式会促使生成代码调用显式转换操作符方法。如果使用as或is,则永远不会调用这些方法
- 引用参数
- 引用参数 out 无须初始化、方法内不能读取参数值、必须写入 ref 必须初始化、方法内可以读取或写入
- 引用传值,可以避免复制字节,提升执行效率
- 引用传值ref和out可以应用于构造函数噢!
- 建议:参数尽量使用弱类型参数(比如接口或抽象类),返回值最好使用强类型
- 自动集合初始化器,编译器针对对象调用Add方法,否则编译出错
- 代码内联
- 是指将一个方法的代码直接编译到调用它的方法当中
- 避免在运行时发出调用所产生的开销
- JIT编译器在调试代码时不会内联属性方法,方便调试
- 发布版本中,经过内联优化,可能比较快
读书笔记—CLR via C#章节8-10的更多相关文章
- 读书笔记—CLR via C#章节3
这本书这几年零零散散读过两三遍了,作为经典书籍,应该重复读反复读,既然我现在开始写博了,我也准备把以前觉得经典的好书重读细读一遍,并且将笔记整理到博客中,好记性不如烂笔头,同时也在写的过程中也可以加深 ...
- 读书笔记—CLR via C#章节11-13
前言 这本书这几年零零散散读过两三遍了,作为经典书籍,应该重复读反复读,既然我现在开始写博了,我也准备把以前觉得经典的好书重读细读一遍,并且将笔记整理到博客中,好记性不如烂笔头,同时也在写的过程中也可 ...
- 读书笔记—CLR via C#章节4-7
前言 这本书这几年零零散散读过两三遍了,作为经典书籍,应该重复读反复读,既然我现在开始写博了,我也准备把以前觉得经典的好书重读细读一遍,并且将笔记整理到博客中,好记性不如烂笔头,同时也在写的过程中也可 ...
- 读书笔记—CLR via C#章节1-2
这本书这几年零零散散读过两三遍了,作为经典书籍,应该重复读反复读,既然我现在开始写博了,我也准备把以前觉得经典的好书重读细读一遍,并且将笔记整理到博客中,好记性不如烂笔头,同时也在写的过程中也可以加深 ...
- 读书笔记—CLR via C#线程27章节
前言 这本书这几年零零散散读过两三遍了,作为经典书籍,应该重复读反复读,既然我现在开始写博了,我也准备把以前觉得经典的好书重读细读一遍,并且将笔记整理到博客中,好记性不如烂笔头,同时也在写的过程中也可 ...
- 读书笔记—CLR via C#同步构造28-29章节
前言 这本书这几年零零散散读过两三遍了,作为经典书籍,应该重复读反复读,既然我现在开始写博了,我也准备把以前觉得经典的好书重读细读一遍,并且将笔记整理到博客中,好记性不如烂笔头,同时也在写的过程中也可 ...
- 读书笔记—CLR via C#线程25-26章节
前言 这本书这几年零零散散读过两三遍了,作为经典书籍,应该重复读反复读,既然我现在开始写博了,我也准备把以前觉得经典的好书重读细读一遍,并且将笔记整理到博客中,好记性不如烂笔头,同时也在写的过程中也可 ...
- 读书笔记—CLR via C#异常和状态管理
前言 这本书这几年零零散散读过两三遍了,作为经典书籍,应该重复读反复读,既然我现在开始写博了,我也准备把以前觉得经典的好书重读细读一遍,并且将笔记整理到博客中,好记性不如烂笔头,同时也在写的过程中也可 ...
- 读书笔记—CLR via C#反射
前言 这本书这几年零零散散读过两三遍了,作为经典书籍,应该重复读反复读,既然我现在开始写博了,我也准备把以前觉得经典的好书重读细读一遍,并且将笔记整理到博客中,好记性不如烂笔头,同时也在写的过程中也可 ...
随机推荐
- Kafka (一)
使用Kafka最新版本0.9 Kafka 配置 1. 安装 首先需要安装Java,推荐安装Java8,不然会出现一些莫名其妙的错误 kafka_2.11-0.9.0.0.tgz tar -xzf ka ...
- 怎么理解Condition(转)
在java.util.concurrent包中,有两个很特殊的工具类,Condition和ReentrantLock,使用过的人都知道,ReentrantLock(重入锁)是jdk的concurren ...
- bzoj 2109 & 2535 空中管制 解读
[] [分析]小猪真的是一个很好的问题.我认为这是一个问题洪水.建立拓扑后(便! ).直接把最外层设定序号为1,第二层为2.bfs下去就可以. . . 结果发现:飞行序号不能同样.. . 于是開始想. ...
- BZOJ 1015 JSOI2008 星球大战 starwar 并检查集合
标题效果:给定一个无向图.联通谋求块的数目,以及k一个点的破坏后每次:联通,块的数目 侧面和摧毁的地步全记录,我们可以做相反的. 需要注意的是该点不能算作破坏联通块 #include<cstdi ...
- JS数据绑定模板artTemplate试用
之前写JS绑定数据曾经用过tmpl库,虽然功能比较强大但是感觉不是很轻量,对于相对简单的数据需求显得有些臃肿.而Ajax返回数据自己拼接html的方式又显得不够高端,因此今天看了一篇介绍artTemp ...
- OpenWrt arp 命令发布
arp命令是用来查看mac与ip在消息路由器缓存表.这是一个基本的介绍了一下我就不说了. 但今天我的同事通过arp.可是在shell脚本就回显示没有此命令,我当时也感到非常费解. 于是乎.做了例如以下 ...
- js中frame的操作问题
这里以图为例,在这里把frame之间的互相操作简单列为:1变量2方法3页面之间元素的互相获取. A 首先从 父(frameABC)------->子(frameA,frameB,frameC) ...
- 实现 mouse-drag 的图标拖动
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/stri ...
- SSH框架总结(帧分析+环境结构+示例源代码下载)
首先,SSH不是一个框架.而是多个框架(struts+spring+hibernate)的集成,是眼下较流行的一种Web应用程序开源集成框架,用于构建灵活.易于扩展的多层Web应用程序. 集成SSH框 ...
- .NET中Redis安装部署及使用方法简介
一Redis服务端以服务方式运行 修改端口压缩文件中配置的是6488 修改密码 修改库的数量 工具配置安装后如下图 二Redis服务端以控制台方式运行 第一步配置本地服务 第二部安装和配置客户端 三C ...