黑马程序员技术交流社区
标题:
求助静态的构造方法主要用来做什么。
[打印本页]
作者:
胡元江
时间:
2013-2-24 16:09
标题:
求助静态的构造方法主要用来做什么。
最好有代码说明下。 面向对象太难理解了
作者:
岳珅
时间:
2013-2-24 16:17
静态构造函数用于初始化任何 静态 数据,或用于执行仅需执行一次的特定操作。 在创建第一个实例或引用任何静态成员之前,将自动调用静态构造函数。
静态构造函数具有以下特点:
静态构造函数既没有访问修饰符,也没有参数。
在创建第一个实例或引用任何静态成员之前,将自动调用静态构造函数来初始化类。
无法直接调用静态构造函数。
在程序中,用户无法控制何时执行静态构造函数。
静态构造函数的典型用途是:当类使用日志文件时,将使用这种构造函数向日志文件中写入项。
静态构造函数在为非托管代码创建包装类时也很有用,此时该构造函数可以调用 LoadLibrary 方法。
如果静态构造函数引发异常,运行时将不会再次调用该构造函数,并且在程序运行所在的应用程序域的生存期内,类型将保持未初始化。
嘿嘿,MSDN是个好东西,想知道啥,直接一查,就全知道了
作者:
罗海云
时间:
2013-2-24 16:25
静态构造函数是C#的一个新特性,其实好像很少用到。不过当我们想初始化一些静态变量的时候就需要用到它了。这个构造函数是属于类的,而不是属于哪里实例的,就是说这个构造函数只会被执行一次。也就是在创建第一个实例或引用任何静态成员之前,由.NET自动调用。
class SimpleClass
{
// Static constructor
static SimpleClass()
{
//
}
}
在使用静态构造函数的时候应该注意几点:
1、静态构造函数既没有访问修饰符,也没有参数。因为是.NET调用的,所以像public和private等修饰符就没有意义了。
2、是在创建第一个类实例或任何静态成员被引用时,.NET将自动调用静态构造函数来初始化类,也就是说我们无法直接调用静态构造函数,也就无法控制什么时候执行静态构造函数了。
3、一个类只能有一个静态构造函数。
4、无参数的构造函数可以与静态构造函数共存。尽管参数列表相同,但一个属于类,一个属于实例,所以不会冲突。
5、最多只运行一次。
6、静态构造函数不可以被继承。
7、如果没有写静态构造函数,而类中包含带有初始值设定的静态成员,那么编译器会自动生成默认的静态构造函数。
作者:
xiaoxiang_04
时间:
2013-2-24 17:38
.
静态构造函数
一:特点
1:静态构造函数既没有访问修饰符,也没有参数。
2:如果没有编写静态构造函数,而这时类中包含带有初始值设定的静态字段,那么编译器会自动生成默认的静态构造函数。
3:在创建第一个类实例或任何静态成员被引用时,.NET将自动调用静态构造函数来初始化类,也就是说我们无法直接调用静态构造函数,也就无法控制什么时候执行静态构造函数了。
4:如果类中包含用来开始执行的 Main 方法,则该类的静态构造函数将在调用 Main 方法之前执行。
5:如果类中的静态字段带有初始化,则静态字段的初始化语句将在静态构造函数之前运行。
6:一个类只能有一个静态构造函数。
7:无参数的构造函数可以与静态构造函数共存。尽管参数列表相同,但一个属于类,一个属于实例,所以不会冲突。
8:最多只运行一次。
9:静态构造函数不可以被继承。
二 :需求
1.为什么使用静态构造函数?
类有一些静态字段和属性,需要在第一次使用类之前,从外部源中初始化这些静态字段和属性
2.静态构造函数什么时候执行
CLR不能确定静态构造函数什么时候执行,也不能预计不同类的静态构造函数按什么顺序执行,但可以明确的是,静态构造函数之多执行一次,即在引用类之前执行在C#中,静态构造函数通常在第一次调用类的成员之前执行
3.静态构造函数有访问修饰符吗?
没有。因为,C#代码从不调用它,但在加载类时,总是由,CLR调用它。对于C#来说是私有的吧
4.静态构造函数可以有参数吗?
不能有参数。
5.一个类可以有多个静态构造函数吗?
一个类只能有一个静态构造函数
6.静态构造函数可以访问实例成员吗?
显然不能。只能访问静态成员
7.一个类可以同时拥有午餐的静态构造函数和实例构造函数吗?
可以。因为,静态构造函数是在加载类时执行的,而实例构造函数是在创建实例时执行的,所以两者不会有冲突
三:示例
class A
{
public static int X;
static A() //④ 执行完后返回到③
{
X = B.Y + 1;
Console.WriteLine("static A()");
}
}
class B
{
public static int Y = A.X + 1; //③ 调用了A的静态成员,
// 转到A的静态构造函数---->
static B() //② 如果带有初始值设定项的静态字段,
// 执行该类的静态构造函数时,
// 先要按照文本顺序执行那些初始值设定项。
// 转到初始值设定项---->
{
Console.WriteLine("static B()");
}
static void Main() //① 程序入口,
// 如果类中包含用来开始执行的 Main 方法,
// 该类的静态构造函数将在调用 Main 方法之前执行。
// 转到B的静态构造函数---->
{
Console.WriteLine("X = {0}, Y = {1}", A.X, B.Y);//⑤ 输出结果
Console.ReadLine();
}
}
执行结果:X=1;Y=2
这个说的比较清楚,我也学习了。
作者:
戴鑫凯
时间:
2013-2-24 17:53
静态构造方法在该类被第一次使用时自动调用一次,而且只调用一次。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2