![9df2525ace8227e79b0613d9440382be.png](https://i-blog.csdnimg.cn/blog_migrate/e68e7d26a90ef11de43570e1e9153b4f.png)
同学,看一下下面的代码会输出什么?
class Program
{
static int i = getNum();
int j = getNum();
static int num = 1;
static int getNum()
{
return num;
}
static void Main(string[] args)
{
Console.WriteLine("i={0}", i);
Console.WriteLine("j={0}", new Program().j);
Console.Read();
}
}
i=0,j=1
为什么呢?
Program加载时要先为里面所有的static变量分配内存,所以首先执行“static int
i = getNum();”,num此时未赋值所以保持默认值为0。然后执行“static int num = 1;”,num赋值变为1。
![9df2525ace8227e79b0613d9440382be.png](https://i-blog.csdnimg.cn/blog_migrate/e68e7d26a90ef11de43570e1e9153b4f.png)
不错!再看下面的代码,会输出什么?
class
Program{
static void Main(string[] args) { TestStatic t = new TestStatic(); t.Print(); Console.Read(); }}
class
TestStatic{
public static int TestValue = InitTestValue();
private static int InitTestValue() {
if (TestValue == 0){ TestValue = 20; }
return 30; }
public TestStatic() { if (TestValue == 0) { TestValue = 5; } }
static TestStatic() {
if (TestValue == 0) { TestValue = 10; } }
public void Print() {
if (TestValue == 5){ TestValue = 6; }
Console.WriteLine("TestValue : " + TestValue); }}
TestValue : 30
![3e3930dad000059c5885320f9579c323.png](https://i-blog.csdnimg.cn/blog_migrate/bc17b9fe25b96c54526d83950caf30c8.png)
静态变量赋值表达式=>静态构造函数=》构造函数
![3e3930dad000059c5885320f9579c323.png](https://i-blog.csdnimg.cn/blog_migrate/bc17b9fe25b96c54526d83950caf30c8.png)
小伙子,不错!有钱图!
● ● ●
![3e3930dad000059c5885320f9579c323.png](https://i-blog.csdnimg.cn/blog_migrate/bc17b9fe25b96c54526d83950caf30c8.png)
END
![a51017ce0c687971066e5911f9f0cf79.gif](https://i-blog.csdnimg.cn/blog_migrate/bdcb783e078fa97f5fba7ad926ae113d.gif)
文章精选
1、面试须知(1):抽象类与抽象方法
2、面试须知(2):常见类型变量与NULL比较是否有效?
3、面试须知(3):C#委托之Func与Action
4、面试须知(4):C# async/awit输出顺序
5、面试须知(5):数据库访问接口ADO.NET