大致代码如下:
public class abc
{
static int a;
int b;
public abc()
{
a = a + 1;
b = a;
}
public void bcd()
{
Console.WriteLine("{0},{1}",a,b);
Console.Read();
}
}
class Program
{
static void Main(string[] args)
{
@ abc c = new abc();
c.bcd();
@@ abc d = new abc();
c.bcd();
c.bcd();
d.bcd();
Console.Read();
}
} 结果是:
1,1
2,1
2,1
2,2
我知道一个类的所有实例是共享静态变量的,但对于以上结果还是感到不解
1. @语句后 a=1 b=1
2. @@语句后 由于是重新创建了另一个实例且a是静态变量 c.bcd()得到的结果应该是a=2 b=2啊 为何是b=1啊
3. c.bcd()与d.bcd()为什么不同啊 为什么d.bcd()输出的结果与我期望的相同呢
public class abc
{
static int a;
int b;
public abc()
{
a = a + 1;
b = a;
}
public void bcd()
{
Console.WriteLine("{0},{1}",a,b);
Console.Read();
}
}
class Program
{
static void Main(string[] args)
{
@ abc c = new abc();
c.bcd();
@@ abc d = new abc();
c.bcd();
c.bcd();
d.bcd();
Console.Read();
}
} 结果是:
1,1
2,1
2,1
2,2
我知道一个类的所有实例是共享静态变量的,但对于以上结果还是感到不解
1. @语句后 a=1 b=1
2. @@语句后 由于是重新创建了另一个实例且a是静态变量 c.bcd()得到的结果应该是a=2 b=2啊 为何是b=1啊
3. c.bcd()与d.bcd()为什么不同啊 为什么d.bcd()输出的结果与我期望的相同呢
==>
b为什么是2呢?这里的b还是c的b即是第一个实例的那个b ,没变。
d.bcd是因为d 在实例他时,a已经=2了,d.b=a所以=2
对象d的b原来是c.b 完全不是一码事。
c.bcd(); // 输出的时候看到1,1
@@ abc d = new abc(); // 第二次实例化abc,a还是上次那个a,但是b是一个新值,b被分配在这个新实例的内存中,通过构造函数a被累加了,这句之后a=2,b=2
c.bcd(); // 此时a=2,c实例的b还是1,所以输出2,1
c.bcd(); // 这个和上一句是相同的输出2,1
d.bcd(); // 这里a=2,但是b是d的实例,所以b=2,这里输出是2,2