.Net Framework Programming 读书笔记(8)
由于某些章节篇幅较短,因此合并如下几章。
[2005-05-10]
8.1 常数
// 注意,C#不允许为常数指定static关键字
// 因为常数隐含为static
public const Int32 MaxEntriesInList = 50;
8.2 字段
// 类型字段需要static关键字
public static readonly Int32 MaxEntriesInList = 50;
9.1 实例构造器
默认构造器:公有的无参构造器
字段赋值Int32 x=5; 将会引起代码膨胀。
可验证安全性:所有基于堆栈的类型都必须在读取之前得到赋值。
[.ctor]
9.2 类型构造器
静态构造器,类构造器,类型初始化器。
static 类名称(){}
CLR调用:在类型的第一个实例被创建之前(just before)
在非继承静态字段被第一次访问之前的某一时刻(可能很早)
[.cctor]
CLR不支持静态Finalize方法。可以在System.AppDomain类型的DomainUnload事件上登记一个回调方法。
9.3 操作符重载方法
CLR对操作符重载一无所知。对于特定语言的操作符有对照表"op_XXX"。
操作符与语言互操作性
[2005-05-11]
9.4 装换操作符方法
装换操作符本质上仍然是一些方法,他们可以将一个类型转化为另一个类型。
implicit--可以隐式转换
explicit--必须显式转换
9.5 引用参数
对于方法:每个参数必须是明确引用/值类型。
out/ref: 那个方法负责初始化参数。在值类型参数上使用out关键字会提升一定的效率。
9.6 可变数目参数
static Int32 Add(params Int32[] values){...}
params关键字告诉编译器在指定的参数上应用一个[System.ParamArrayAttribute]定制特性。
class App{
static void Main()
{
DisplayTypes(new object(),new Random(),"Jeff",5);
}
static void DisplayTypes(params object[] objects)
{
foreach(object o in objects)
Console.WriteLine(o.GetType());
}
}
输出结果:
System.Object
System.Random
System.String
System.Int32
9.7 虚方法的调用机理
ToString在基类Object中的虚方法。
继承自Object的类型,需要 public override String ToString(){...}
new--新创建一个方法,与基类的同名方法无关。
override--重新编写基类虚方法,如基类中调用了改名方法;则启动该重载方法。
[2005-05-12]
10.1 无参属性
字段区别于属性,数据封装(data encapsulation),属性=智能字段(smart field)
封装了对字段访问的方法典型的被称为访问器方法(accessor method)
10.2 含参属性
C# -- 索引器(indexer);VB -- 默认属性(default property);C++ -- 索引属性(index property)
CLR 本身不知道属性,仅仅是定义在类型中的一对(或一个)
C#将索引器看作是重载[]操作符的一种方式。
浙公网安备 33010602011771号