6->>方法
时间:2011-03-29 来源:乱舞春秋
1>=实例构造器【.ctor】:
默认情况下,对于引用类型,如果我们没有显示的定义实例构造器,则C#编译
器会为我们定义一个无参的公有实例构造器。一个类的实例构造器在访问基类的继承
字段之前,必须调用基类的实例构造器,C#编译器会自动产生对基类默认构造器的
调用代码。特殊情况下类型实例的创建不会调用实例构造器:反序列化一个对象时、
调用Object的MemberwiseClone方法克隆对象时。C#值类型不允许定义无参的构
造器,CLR允许这么做
2>=类型构造器【.cctor】:
又称静态构造器。C#只允许一个静态构造器,不允许有访问修饰符【默认是
private】不能有参数。 静态构造器由CLR负责,一旦被调用,那么在整个应用程
序域【AppDomain】的生命周期内就不再被用;静态构造器不应该调用基类的静
态构造器,不需要这样做是因为基类的静态成员并不被派生类所继承。但是我们看
到的是派生类内部引用可基类的静态字段,事实上这不是继承而是编译时静态绑定,
其他的静态成员也是如此的。
3>=操作符重载方法【operator】:
CLR对操作符一无所知,它就不认识什么是操作符。但是却规范了编程语言应
该怎么重载操作符,对CLR而言,重载操作符仅仅是一些方法。如下代码:
class MyType{
public static MyType operator+(Mytype mt1,Mytype mt2){....}
}
编译器会产生一个名为op_Addition的方法,该方法上有一个specialname标记,表
示这是一个特殊的方法。当编译器看到源代码中的“+”时,就会去看其中的操作数据
类型中有哪一个定义了参数类型和操作类型兼容的、名为op_Addition的specialname
方法。如果存在就产生调用该方法的代码,如果不存在就出现编译错误了。【一些核心
的FCL类型并没有定义任何操作符重载方法(Decimal除外),因为 CLR直接提供了IL
指令支持直接操作这些类型。可以避免些性能的损失,因为如果提供了方法,最终还是
调用的IL指令,所以FCL的核心类型(如 int,byte...)就省去了这些操作符重载方法】
4>=转换操作符方法【implicit、explicit】:
未完。。。。待续。。。。
相关阅读 更多 +