标签:
1. 概述
本章重点讲述类型中的各种方法,包括实例构造器、类型构造器、操作符/类型转换重载、扩展方法、分部方法。
2. 名词解释
① 构造器:是允许将类型的实例初始化为良好状态的一种特殊方法。
3. 主要内容
3.1 实例构造器和类(引用类型)
① 创建一个引用类型的实例时,首先为实例的数据字段分配内存,然后初始化对象的附加字段(类型对象指针和同步块索引),最后调用类型的实例构造器 来设置对象的初始状态。
② 实例构造器永远不能被继承。
③ 如果类的修饰符为static(sealed或abstract),编译器不会在类的定义中生成一个默认构造器。
3.2 实例构造器和结构(值类型)
① 值类型的实例构造器只有在显示调用时才会执行。
3.3 类型构造器
① 默认没有定义类型构造器,只能定义一个。
② 必须是static,默认是私有的。保证只能被CLR调用。
③ 不要在值类型中定义类型构造器。
④ 类型构造器中的代码只能访问类型的静态字段。
⑤ 显式类型构造器可能包含具有副作用的代码,所以需要精确拿捏运行的时间。
3.4 操作符重载方法
① CLR规范要求操作符重载方法必须是 public 和 static 方法。
3.5 转换操作符方法
① C#中,implicit关键字告诉编译器为了生成代码来调用方法,不需要在源码中进行显式转换。
而explicit告诉编译器只有在发现了显式转型时,才调用方法。
operator关键字告诉编译器该方法是一个转换操作符。
operator之后是对象要转换成的类型,后面的括号中,是要从什么类型转换。
*建议将System.Decimal作为一个典型来研究操作符重载和转换操作符方法。
public static implicit operator Rational (Single num) { return new Rational(num); } public static explicit operator Int32 (Rational r) { return r.ToInt32(); }
Rational r2 = 2.5F; Int32 x = (Int32) r1;
3.6 扩展方法
C#的扩展方法,允许你定义一个静态方法,并用实例方法的语法来调用它。(在第一个参数前加this关键字)
3.6.1 规则和原则
① C#只支持扩展方法,不支持扩展属性、扩展事件、扩展操作符等。
② 扩展方法必须在非泛型的静态类中声明。
③ 要求静态类本身具有文件作用域。
④要求引用所属的命名空间。
3.6.2 用扩展方法扩展各种类型
可以为委托或者枚举类型添加扩展方法。
3.6.3 ExtensionAttribute类
C#中,一旦用this关键字标记了某个静态方法的第一个参数,编译器就会在内部向该方法应用一个定制attribute。
3.7 分部方法
① 只能在分部类或结构中声明。
② 只能返回void,不能有输出参数。
③ 声明和实现必须具有完全一致的签名。
④ 如果没有对应的实现部分,便不能在代码中创建一个委托来引用这个分部方法。
⑤ 总是被视为private方法。
4. 总结
标签:
原文地址:http://www.cnblogs.com/stone_lv/p/4306017.html