.NET中的特殊类型成员之一(转)

.NET中的特殊类型成员

----微软 .NET平台系列文章之三

译文/赵湘宁

在前面的两篇文章中,我们研究了类型的基础知识。本文我们将考察类型能定义的某些特殊成员。在大力简化处理类型及其对象实例需要的语法方面,这些类型有助于面向对象设计。

类型构造器
你已经熟悉了什么是构造器,它负责对象实例状态的初始化。除了实例构造器以外,Microsoft(r).NET公共语言运行时(CLR)还支持类型构造器(也叫做静态构造器、类构造器或类型初始化)。类型构造器可被应用到接口,类和数值类型。它允许任何在类型中声明的成员被访问之前实现必要的初始化。类型构造器不需要参数并且总是返回void类型。类型构造器只访问类型的静态字段并且其通常的目的是初始化这些字段。在类型的任何实例被创建之前以及类型的任何静态字段或方法被引用之前,必须要保证已经运行了类型构造器。
许多语言(包括C#)在定义类型时都自动产生类型构造器。但是某些语言需要显式(手工)实现类型构造器。
为了理解类型构造器,让我们研究一下列在C#中定义的类型:

class Atype {
static int x = 5;
}

在建立这个代码时,编译器自动地为产生Atype类型构造器。这个构造器负责初始化静态字段x为值5。如果你使用ILDasm,很容易认出类型构造器方法,因为它们的名字都是.cctor(对于类构造器而言)。
在C#中,通过在类型中定义静态构造器方法,你可以自己实现类型构造器。关键字static的使用意味着这时类型构造器,而不是实例构造器。下面是一个非常简单的例子:

class AType {
static int x;

static AType() {
x = 5;
}
}

这个类型定义与前面的相同。注意类型构造器决不能试图创建自己的类型实例,而且构造器也不能引用类型的非静态成员。
最后,如果你用C#编译器编译下列代码,它产生单独的类型构造器方法:

class AType {
static int x = 5;

static AType() {
x = 10;
}
}[@more@]

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/79548/viewspace-925796/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/79548/viewspace-925796/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值