《CLR.via.C#第三版》第二部分第6,7章节读书笔记(三)
2014-11-10 14:08
267 查看
第6章讲的是类型和成员基础
重要认知:虚方法
虚方法的设计原则:设计一个类型时,应尽量减少所定义的虚方法的数量。
首先,调用虚方法的速度比调用非虚方法慢。
其次,JIT编译器不能内嵌虚方法,这进一步影响了性能。
第三,虚方法使组件的版本控制变得更脆弱。
第四,定义一个基类时,如果希望一些方法是多态的,最好的办法是使复杂的办法成为虚方法,简便的成为非虚方法。
引申到定义类时应遵循的原则:
1. 定义类时,除非确定要将此类作为基类使用,否则总是显示指定为sealed类;
2. virtual永远最后才考虑,因为virtual成员会放弃许多控制,丧失独立性,过于依赖派生类的正确行为;
关于虚方法的代码示例:(如果没有注释,你"猜对"了吗?)
View Code
知识点:const静态常量和readonly动态常量
1)const修饰的常量在声明的时候必须初始化;readonly修饰的常量则可以延迟到构造函数初始化
2)const修饰的常量在编译期间就被解析,即常量值被替换成初始化的值;readonly修饰的常量则延迟到运行的时候
此外const常量既可以声明在类中也可以在函数体内,但是static readonly常量只能声明在类中。
更对关于const和readonly请看这个链接,我觉得作者讲的不错。
重要认知:虚方法
虚方法的设计原则:设计一个类型时,应尽量减少所定义的虚方法的数量。
首先,调用虚方法的速度比调用非虚方法慢。
其次,JIT编译器不能内嵌虚方法,这进一步影响了性能。
第三,虚方法使组件的版本控制变得更脆弱。
第四,定义一个基类时,如果希望一些方法是多态的,最好的办法是使复杂的办法成为虚方法,简便的成为非虚方法。
引申到定义类时应遵循的原则:
1. 定义类时,除非确定要将此类作为基类使用,否则总是显示指定为sealed类;
2. virtual永远最后才考虑,因为virtual成员会放弃许多控制,丧失独立性,过于依赖派生类的正确行为;
关于虚方法的代码示例:(如果没有注释,你"猜对"了吗?)
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace CATest101 { public class A { public void MethodF() { Console.WriteLine("A.F"); } public virtual void MethodG() { Console.WriteLine("A.G"); } } public class B : A { new public void MethodF() { Console.WriteLine("B.F"); } public override void MethodG() { Console.WriteLine("B.G"); } } class Program { static void Main(string[] args) { B b; b = new B(); A a = b;//定义A类型的变量a,并指向b对象的实例 a.MethodF(); //输出A.F b.MethodF(); //输出B.F a.MethodG(); //输出B.G b.MethodG(); //输出B.G } } }
View Code
知识点:const静态常量和readonly动态常量
1)const修饰的常量在声明的时候必须初始化;readonly修饰的常量则可以延迟到构造函数初始化
2)const修饰的常量在编译期间就被解析,即常量值被替换成初始化的值;readonly修饰的常量则延迟到运行的时候
此外const常量既可以声明在类中也可以在函数体内,但是static readonly常量只能声明在类中。
更对关于const和readonly请看这个链接,我觉得作者讲的不错。
相关文章推荐
- 《CLR.via.C#第三版》第二部分第4,5章节读书笔记(二)
- 《CLR.via.C#第三版》第二部分第10,11章节读书笔记(五)
- 《CLR.via.C#第三版》第二部分第12章节 泛型 读书笔记(六)
- 《CLR.via.C#第三版》第二部分第8,9章节读书笔记(四)
- 《CLR.via.C#第三版》第二部分第13章节 接口 读书笔记(七)
- 第6部分 系统监视与性能调整
- 【C语言探索之旅】 第二部分第九课: 实战"悬挂小人"游戏 答案
- DirectX游戏编程入门——第二部分(游戏编程工具箱) ——精灵变换
- DirectX游戏编程入门——第二部分(游戏编程工具箱) ——精灵编程之碰撞检测
- android sqlite SQLiteDatabase 操作大全 不看后悔!必收藏!看后精通SQLITE (第二部分)
- Programming Exercise 6:Support Vector Machines 第二部分
- 开发出高性能的网站,第二部分 — 最佳缓冲控制(转)
- 转载:Solr的自动完成实现方式(第二部分:Suggester方式)
- iso15675 道路车辆控制局域网络诊断 第二部分 网络层服务 阅读笔记 (2)
- 第二部分 域名对SEO的影响
- maven 项目(四) spring集成springMVC开发统一接入API(准备工作:第二部分)
- 第二部分:OLE数据传输(OLE Drag和Drop随笔)
- Programming Exercise 8:Anomaly Detection and Recommender Systems 第二部分
- Java密码学原型算法实现——第二部分:单钥加密算法