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。
{
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。
先调用static Demo再调用public Demo()
Demo d2 = new Demo();
只调用 public Demo()
所以是3
具体解说上网上搜一下单例模式就可以了。
上述代码执行步骤
1、static Demo()
2、Demo d1 =new Demo();
3、Demo d2 =new Demo();
所以结果是3.
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()
}
}
只不过单例模式需要通过静态成员来实现
这道题需要理解了static 这个关键字
Demo d2 = new Demo(); 静态值为2 实例执行一次 +1 结果3
先调用static Demo再调用public Demo()
Demo d2 = new Demo();
只调用 public Demo()
2、Demo d1 =new Demo();
3、Demo d2 =new Demo();
Console.WriteLine(Demo.count); //此时输出 2 ,因为执行了 static Demo()和public Demo()
Demo d2 = new Demo();
Console.WriteLine(Demo.count); //此时输出3 ,因为执行了 public Demo()
那你把初始化代码放到哪呢?放到普通构造函数里,那肯定不行。因为静态成员没有创建实例就要可用。专门建一个static public方法来初始化?这样用起来非常不方便,你需要在“第一次”使用静态成员前先调用这个方法。
如果你在使用静态成员前忘了调用该方法,会导致错误。
如果重复调用,又是冗繁操作。所以静态构造函数就派上用场了。
它会在你第一次调用静态成员(或创建实例)的时候自动被调用