请教一个笔试题,关于类

lianglin999 2010-10-13 12:30:45
 class Demo
{
public static int count = 0;
static Demo()
{
count++;
}

public Demo()
{
count++;
}
}
class Program
{
static void Main(string[] args)
{
Demo d1 = new Demo();
Demo d2 = new Demo();
Console.WriteLine(Demo.count); //结果为什么是3,不是2
}
}


想知道,Demo类里面static Demo()方法是什么意思
为什么输出结果是3,而不是2。
...全文
355 34 打赏 收藏 转发到动态 举报
写回复
用AI写文章
34 条回复
切换为时间正序
请发表友善的回复…
发表回复
KGBOS21 2010-10-14
  • 打赏
  • 举报
回复
学习了
zhou444871 2010-10-14
  • 打赏
  • 举报
回复
学习了!
kongdelu2008 2010-10-13
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 zenghd 的回复:]
静态构造函数,只执行一次

Demo d1 = new Demo();
先调用static Demo再调用public Demo()


Demo d2 = new Demo();
只调用 public Demo()


所以是3
[/Quote]
绝对正解!
Olive_Guo 2010-10-13
  • 打赏
  • 举报
回复
运行了一遍,就知道count 怎么累加的了,仍然不知道的是为什么是这样的执行顺序。关注中……
csproj 2010-10-13
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 arthur080319 的回复:]

单例模式 只执行一遍 是最先执行的
具体解说上网上搜一下单例模式就可以了。
上述代码执行步骤
1、static Demo()
2、Demo d1 =new Demo();
3、Demo d2 =new Demo();
所以结果是3.
[/Quote]
准确说这里和单例模式没多少关系。
只不过单例模式需要通过静态成员来实现
这道题需要理解了static 这个关键字
kj289907795 2010-10-13
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 zenghd 的回复:]
静态构造函数,只执行一次

Demo d1 = new Demo();
先调用static Demo再调用public Demo()


Demo d2 = new Demo();
只调用 public Demo()


所以是3
[/Quote]
学习了!
q107770540 2010-10-13
  • 打赏
  • 举报
回复

class Demo
{
public static int count = 0;
static Demo()
{
count++;
}

public Demo()
{
count++;
}
}
class Program
{
static void Main(string[] args)
{
Demo d1 = new Demo();
Console.WriteLine(Demo.count); //所以此时输出 2 ,因为执行了 static Demo()和public Demo()
Demo d2 = new Demo();
Console.WriteLine(Demo.count); //所以此时输出3 ,因为执行了 public Demo()
}
}
lianglin999 2010-10-13
  • 打赏
  • 举报
回复
恩,学习了
Arthur080319 2010-10-13
  • 打赏
  • 举报
回复
单例模式 只执行一遍 是最先执行的
具体解说上网上搜一下单例模式就可以了。
上述代码执行步骤
1、static Demo()
2、Demo d1 =new Demo();
3、Demo d2 =new Demo();
所以结果是3.
porschev 2010-10-13
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 zenghd 的回复:]
静态构造函数,只执行一次

Demo d1 = new Demo();
先调用static Demo再调用public Demo()


Demo d2 = new Demo();
只调用 public Demo()


所以是3
[/Quote]

学习了。。
ZengHD 2010-10-13
  • 打赏
  • 举报
回复
静态构造函数,只执行一次

Demo d1 = new Demo();
先调用static Demo再调用public Demo()


Demo d2 = new Demo();
只调用 public Demo()


所以是3
denbes 2010-10-13
  • 打赏
  • 举报
回复
就是初始化静态成员

比如有几个静态成员需要初始化
那你把初始化代码放到哪呢?

放到普通构造函数里,那肯定不行。因为静态成员没有创建实例就要可用。

专门建一个static public方法来初始化?这样用起来非常不方便,你需要在“第一次”使用静态成员前先调用这个方法。
如果你在使用静态成员前忘了调用该方法,会导致错误。
如果重复调用,又是冗繁操作。

所以静态构造函数就派上用场了。
它会在你第一次调用静态成员(或创建实例)的时候自动被调用
drmfs 2010-10-13
  • 打赏
  • 举报
回复
这种模式一般实际应用在什么地方啊? 谁举个小例子
hanzhehanzhe 2010-10-13
  • 打赏
  • 举报
回复
Demo d1 = new Demo();
Console.WriteLine(Demo.count); //此时输出 2 ,因为执行了 static Demo()和public Demo()
Demo d2 = new Demo();
Console.WriteLine(Demo.count); //此时输出3 ,因为执行了 public Demo()
YQ_curtain 2010-10-13
  • 打赏
  • 举报
回复
学习了。
tianyu0220 2010-10-13
  • 打赏
  • 举报
回复
1、static Demo()
2、Demo d1 =new Demo();
3、Demo d2 =new Demo();
無_1024 2010-10-13
  • 打赏
  • 举报
回复
受教了
种草德鲁伊 2010-10-13
  • 打赏
  • 举报
回复
静态构造方法,会在静态成员第一次被调用的时候先执行一次。
Ivan333 2010-10-13
  • 打赏
  • 举报
回复
只有第一次实例化的时候调用静态构造方法 ,在调用构造方法, 第二次调用一次构造方法
shilei94695 2010-10-13
  • 打赏
  • 举报
回复
静态构造函数,只执行一次

Demo d1 = new Demo();
先调用static Demo再调用public Demo()


Demo d2 = new Demo();
只调用 public Demo()
加载更多回复(13)

111,129

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧