c#构造函数

来源:百度知道 编辑:UC知道 时间:2024/06/16 11:53:30
using System;
class MyClass
{
public static int staticInt;
static MyClass()
{
Console.WriteLine(staticInt);
Console.WriteLine("The static constructor invoked.");
staticInt = 1;
}
public static void MyMethod()
{
Console.WriteLine("MyMethod invoked.");
}
}
class MainClass
{
static void Main()
{
Console.WriteLine(MyClass.staticInt);
MyClass.MyMethod();
}
}
结果是什么?为什么?请高手回答。谢谢!

你的结果肯定报错,因为staticint是int类型。

正常的话
0
MyMethod invoked.

因为staticint还没赋值,也没有调用到构造函数。

我分析下,不过是以c++的知识来判断的,应该是这样的。myclass的声明过程先调用了他的构造函数, static MyClass()
{
Console.WriteLine(staticInt);
Console.WriteLine("The static constructor invoked.");
staticInt = 1;
}
staticInt 这时如果是c++的话是有问题的,staticint 没有初始化,是错误的,但c#可能会输出0。。。。然后是The static constructor invoked
然后是 运行主函数main中的Console.WriteLine(MyClass.staticInt);输出1;
最后是MyClass.MyMethod();

输出“MyMethod invoked”;

本人用c#验证了一下确实是我以上所说的

结果:
0
The static constructor invoked.
1
MyMethod invoked.
请按任意键继续. . .

分析:
Console.WriteLine(MyClass.staticInt);的时候需要先对MyClass初始化.
所以,
1)初始化staticInt,int的默认0值是0,所以staticInt此时为0.
2)调用构造函数:
Console.WriteLine(staticInt);
Console.WriteLine("The static constructor invoked.");
staticInt = 1;
所以,先打印