关于静态构造函数,大家帮忙
这么一个类
public class Test{
private Hashtable ht;
public static Check(){
return ht["a"]
}
我想写一个静态构造函数初始化 ht,可是不知道怎么写,大家帮帮忙,要测试一下噢
问题点数:100、回复次数:20Top
1 楼gabriel1(说自己的话,让别人走路去吧)回复于 2005-01-28 11:15:10 得分 0
啥意思?
为什么要把构造函数写成静态?Top
2 楼brightheroes(在地狱中仰望天堂)回复于 2005-01-28 11:17:59 得分 0
静态构造函数,只能对静态字段进行初始化吧
你这个ht是实例的,不能这么用Top
3 楼mao5000(怕鱼的水)回复于 2005-01-28 11:19:28 得分 0
是阿。我觉得奇怪。。。为啥要把构造函数写成静态的?Top
4 楼shenyisyn(魔法师)回复于 2005-01-28 11:21:13 得分 0
构造函数 不能静态 静态了就不叫构造函数了Top
5 楼mao5000(怕鱼的水)回复于 2005-01-28 11:21:18 得分 0
ht 要在 Check()重新实例的。Top
6 楼brightheroes(在地狱中仰望天堂)回复于 2005-01-28 11:23:06 得分 10
静态的叫做类型构造器Top
7 楼saucer(思归)回复于 2005-01-28 11:24:52 得分 20
>>>构造函数 不能静态 静态了就不叫构造函数了
可以的
public class Test{
private Hashtable ht;
static Test()
{
ht = new Hashtable();
ht.Add("a","x");
}
public static object Check(){
return ht["a"];
}
see
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/csref/html/vclrfstaticconstructors.aspTop
8 楼trnbo(【没有蛀牙】)回复于 2005-01-28 11:28:08 得分 10
如果一些操作只希望被执行一次。这时候就可以考虑使用静态构造函数。当然如果设计的面向对象一些的话,那就是使用单件模式了。Top
9 楼saucer(思归)回复于 2005-01-28 11:28:18 得分 10
change
private Hashtable ht;
===>
private static Hashtable ht;Top
10 楼brightheroes(在地狱中仰望天堂)回复于 2005-01-28 11:28:35 得分 10
思归老大
这个static Test里面,不能ht = new Hashtable()吧
这个Hashtable是实例的,不是static的Top
11 楼trnbo(【没有蛀牙】)回复于 2005-01-28 11:28:46 得分 10
静态构造函数自动被调用,不能被显式调用。
虽然提供了许多约束条件,但是静态构造函数执行的确切时间和顺序是不确定的:
一个类的静态构造函数在这个类的任何实例被创建前执行。
一个类的静态构造函数在类的任何静态成员被引用前执行。
一个类的静态构造函数在它的所有派生类的静态构造函数执行之后执行。
一个类的静态构造函数从不会被执行一次以上。Top
12 楼brightheroes(在地狱中仰望天堂)回复于 2005-01-28 11:28:59 得分 0
晕,呵呵
没有看到 change
Top
13 楼flyingdream123()回复于 2005-01-28 11:29:26 得分 0
public static Check(){
//初始化ht
return ht["a"]
}Top
14 楼zzcwhq(zzcwhq)回复于 2005-01-28 11:41:43 得分 10
静态构造函数只能初始化静态成员!Top
15 楼johnczy(JohnChen)回复于 2005-01-28 11:52:27 得分 5
思归说的不错,不过在你的例子中
private Hashtable ht;
还是要改成
private static Hashtable ht;
静态的Check() 只能调静态的ht。
Top
16 楼Seeko0(阿 枫(终点又回到起点,到现在我才发现))回复于 2005-01-28 11:54:12 得分 0
public class Test{
public Test(){}
public static Test() //静态构造函数,只会在Test第一次执行时有用
{
ht.Add("a","a"); //赋值
}
private static Hashtable ht; //将ht也定义成静态函数
public static Check(){
return ht["a"]
}
}Top
17 楼pingnt(淡蓝色的雪)回复于 2005-01-28 12:04:01 得分 0
public class Test{
private static Hashtable ht;
public Test(){
//非静态成员的初化;
}
public static Test(){
//此初始化ht;
}Top
18 楼gabriel1(说自己的话,让别人走路去吧)回复于 2005-01-28 14:08:28 得分 5
还是老大厉害,一下就说中答案:
静态构造方法是在静态成员/方法被调用时执行的一段初始化方法.Top
19 楼xaodoudou(我不想做潜水员)回复于 2005-01-28 17:09:19 得分 0
果然是思归,问题解决 !
什么时候我也要混成五个星!!
多谢各位Top
20 楼possible_Y(████本人签名需要刮开,方可看到 )回复于 2005-01-28 17:30:42 得分 10
静态构造函数主要是用来初始化readonly static字段的Top




