c# 类型构造器
更新时间:2012年10月29日 13:46:42 作者:
CLR还支持类型构造器,也称为静态构造器。c#类型构造器可应用引用类型和值类型,永远没有参数
主要作用是:设置类型中静态字段的初始化。类型构造器不一定要在类中定义,但是最多也只能有一个。例:
class SomeType{
static SomeType(){}
}
jit编译器在编译一个方法时,会查看代码引用哪些类型。任何类型定义了类型构造器,jit编译器都会检查当前AppDomain是否已经执行了这个类型构造器,如果没有就执行,已经执行了就直接返回,不再次执行。在多线程的环境下,可能同一时间有多个执行相同的方法,CLR希望每一个AppDomain中一个类型构造器只执行一次,在调用类型构造器时,使用互斥线程同步锁,解决这个问题。
类型构造器中只能访问类型的静态字段,一般只是初始化这些字段。
代码内联初始化字段:
class SomeType
{
Static int x = 5;
}
等价于
class SomeType
{
Static int x;
Static SomeType()
{
x = 5;
}
}
还有:
class SomeType
{
Static int x = 3;
Static SomeType()
{
x = 5;
}
}
等价于
class SomeType
{
Static int x;
Static SomeType()
{
x = 3;
x = 5;
}
}
虽然c#不允许值类型为它的实例化字段使用内联初始化语法,但是静态字段可以的,以上把class改成struct一样可以运行,
主要原因是:值类型可以定义无参类型构造器,但是不可以定义无参类型实例构造器。
复制代码 代码如下:
class SomeType{
static SomeType(){}
}
jit编译器在编译一个方法时,会查看代码引用哪些类型。任何类型定义了类型构造器,jit编译器都会检查当前AppDomain是否已经执行了这个类型构造器,如果没有就执行,已经执行了就直接返回,不再次执行。在多线程的环境下,可能同一时间有多个执行相同的方法,CLR希望每一个AppDomain中一个类型构造器只执行一次,在调用类型构造器时,使用互斥线程同步锁,解决这个问题。
类型构造器中只能访问类型的静态字段,一般只是初始化这些字段。
代码内联初始化字段:
复制代码 代码如下:
class SomeType
{
Static int x = 5;
}
等价于
复制代码 代码如下:
class SomeType
{
Static int x;
Static SomeType()
{
x = 5;
}
}
还有:
复制代码 代码如下:
class SomeType
{
Static int x = 3;
Static SomeType()
{
x = 5;
}
}
等价于
复制代码 代码如下:
class SomeType
{
Static int x;
Static SomeType()
{
x = 3;
x = 5;
}
}
虽然c#不允许值类型为它的实例化字段使用内联初始化语法,但是静态字段可以的,以上把class改成struct一样可以运行,
主要原因是:值类型可以定义无参类型构造器,但是不可以定义无参类型实例构造器。
相关文章
C#序列化与反序列化(Serialize,Deserialize)实例详解
这篇文章主要介绍了C#序列化与反序列化(Serialize,Deserialize)的方法,实例分析了C#序列化与反序列化的常见技巧,需要的朋友可以参考下2015-06-06C#实现微信公众号群发消息(解决一天只能发一次的限制)实例分享
经过几天研究网上的代码和谢灿大神的帮忙,今天终于用C#实现了微信公众号群发消息,现在分享一下2013-09-09
最新评论