第九章 方法
一、 实例构造器
1、 前面提到用new操作符创建对象时的三部曲:
l 为对象分配内存
l 初始化对象的附加成员(方法表指针和SyncBlockIndex)
l 调用实例构造器初始化实例状态
在分配内存时,系统将所有内存位置均置为0值,这就是为什么字段初始化而未赋值时均为0或null值。
不调用实例构造器的情况:
l 调用Object.MemberwiseClone()方法创建实例(分配内存;初始化附加成员;将源对象字节拷贝到新创建的对象)
l 反序列化对象时
2、 为避免为实例字段产生过多的构造器代码,应避免在声明字段时为字段符初值,而是在无参构造器中为它们符初值,在其他重载的构造器中调用无参构造器。
3、 值类型实例构造器
l C#编译器不会自动调用其构造器,必须显式调用构造器才能起作用
l C#编译器不允许为值类型定义无参实例构造器(下面会介绍可以定义无参类型构造器)
l 不能为结构中的字段在声明的同时赋初值,可通过定义带参构造器的方式进行
l 必须在结构的构造器中为所有字段赋初值
二、 类型构造器
1、 类型构造器的一些限制:
l 不能带任何参数
l 类型构造器总为私有的,不能用其他访问修饰符
2、类型构造器被调用的时机:
l 第一个实例被创建,或者类型的第一个字段或成员第一次被访问之前
l 非继承静态字段被第一次访问之前
类型构造器在类型的生命周期中只被调用一次;
3、一些限制:
l 若类型构造器中抛出异常,则该类型变成不可访问,访问其中的任何字段或方法均会抛出System.TypeInitializationException异常
l 类型构造器只能访问类型的静态字段
l 类型构造器不应该调用基类型的类型构造器,因静态字段并非继承而是编译时静态绑定
三、 操作符重载
1、 操作符重载
C#中对操作符重载的一些限制:
l 必须声明为public static
l 必须有一个参数为操作符所属类型
l 不能改变操作符原始定义的引数个数
l 若定义了true操作符也必须同时定义false操作符,二者都必须返回bool值
l ++、--操作符必须返回其所隶属之类型的一个实例
l 可被重载的一元操作符:+、-、!、~、++、--、true、false
l 可被重载的二元操作符:+、-、*、/、%、!、^(异或)、<、>、<<、>>、==、!=、<=、>=
l 不允许被重载的操作符:&&、 |
关键词: 第9章 办法[《.net框架程序设计》读书笔记]