关于c#中static的一些理解

class A
    {
        public static int X;
        static A()
        {
            X = B.Y + 1;
        }
    }
    class B
    {
        public static int Y = A.X + 1;
        static B()
        { }
        static void Main()
        {
            Console.WriteLine("X={0},Y={1}", A.X, B.Y);
        }

    }

运行结果为X=1,Y=2

(引用到类的时候,静态的变量和方法会先被执行)

程序运行,寻找main函数的类,也就是class B,

因为静态的变量和方法会先被执行,故而会先声明静态变量Y,

变量Y中又使用到了class A的静态变量X,而且加载的过程中,类又会先将静态的变量和构造方法(构造方法,普通的静态方法并不会被执行)执行,

然后class B就声明了变量X,执行A方法,这也引用到了class A的X变量,这个时候,class B的Y变量已经在内存中声明了,但是A.X + 1还在运算中,所以这时,Y就等于它的默认值0,计算得到A.X=1,返回到Y=A.X + 1;得到B.Y=2,加载静态方法B,然后才到Main函数执行

现在我们来改变下class A
    {
        public static int X;
        A()
        {
            X = B.Y + 1;
        }
    }

class B
    {
        public static int Y = A.X + 1;
        static B()
        { }
        static void Main()
        {
            Console.WriteLine("X={0},Y={1}", A.X, B.Y);
        }

    }

当A的构造方法不是静态时,变量B.Y在调用A.X的时候,就不会去执行构造方法A,结果也就变成X=0,Y=1

 

(新手,写此只为将看过的东西做个笔记,有写错的地方请指出)

转载于:https://www.cnblogs.com/gebingbin/archive/2012/02/16/2353582.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值