注册 登录
编程论坛 C# 论坛

脑袋卡壳,怎么也想不出静态变量的值 4 从哪里来的?请教

lxsxd 发布于 2014-08-23 10:18, 469 次点击
一、题目 静态成员和非静态成员的区别。
例题代码:
namespace 书本例题
{
    class Program
    {
        class StaticC1
        {
            private string objName;
            private int x;     //非静态成员变量
            private static int stx;  //静态成员变量
            public void setx(int x)  //非静态成员方法
            {
                this.x = x;
            }
            public static void setstx(int y)  //静态成员方法
            {
                stx = y;
            }
            public void show()  //非静态成员方法
            {
                Console.WriteLine("对象{0}:X={1},stx={2}", this.objName, x, stx);
            }
            public StaticC1(string objName)
            {
                this.objName = objName; x = 0; stx = 0;
            }

        }

        static void Main(string[] args)
        {
            StaticC1 c1 = new StaticC1("c1");
            StaticC1 c2 = new StaticC1("c2");

            c1.setx(1);
            StaticC1.setstx(2);

            c2.setx(3);
            StaticC1.setstx(4);

            c1.show();
            c2.show();

 
            Console.ReadKey();
        }
    }
}
运行结果:
对象c1:x=1,stx=4;
对象c2:x=3,stx=4;

二、我的理解

1、关于非静态变量,我能理解。
2、关于静态变量stx的值,我不明白的是,这个stx=4,这个4从哪里来的?
好像并没有赋值啊?

真正的脑袋卡壳了。晕,我都不认识自己了,学C#学的东南西北都不知道了。请大侠们帮小虾清清头脑。
2 回复
#2
邓士林2014-08-23 12:10
private static int stx;  //静态成员变量

这就是static的作用,因为两个对象c1和c2都用到了这个变量,它保存在静态存储区,数值就是以最后一次赋值为它的值。覆盖掉上一次赋值
#3
lxsxd2014-08-23 16:47
感谢信
-------
谢谢 邓士林 版主!理解了。
1