Welcome

首页 / 软件开发 / C# / C#的静态域和非静态域

C#的静态域和非静态域2007-09-23 本站 静态域的声明是使用static修饰符,其它的域都是非静态域。静态域和非静态域分别属于C#中静态变量和非静态变量。

若将一个域说明为静态的,无论建立多少个该类的实例,内存中只存在一个静态数据的拷贝。当这个类的第一个实例建立时,域被初始化。以后再进行类的实例化时,不再对其进行初始化,所有属于这个类的实例共享一个副本。

与之相反,非静态域在类的每次实例化时,每个实例都拥有一份单独的拷贝。

下面的例子清楚地反映了二者之间的区别。

程序清单12-1:

using System;public class Count{static int count;int number;public Count(){count=count+1;number=count;}public void show(){Console.WriteLine("object{0}:count={1}",number,count); }}class Test{public static void Main(){ Count a=new Count(); a.show(); Console.WriteLine();Count b=new Count(); a.show(); b.show(); Console.WriteLine();Count c=new Count(); a.show(); b.show(); c.show();}
上面的例子中,类Count中域count被声明为静态,为所有类的实例所共享。类每进行一次实例化,它的值就加1,这个操作就在构造函数中实现,因而可以用于对中类的实例数进行计数。

域number用来存放当前实例的编号。当实被实例化时,在构造函数中就对编号进行赋值,从而可以看出实例化的顺序。

方法show用来在屏幕上打印出当前类的实例数,还有类的各个实例的编号。

程序的运行结果应为:

object1:count=1
——————————
object1:count=2
object2:count=2
——————————
object1:count=3
object2.count=3
object3.count=3

从上面的例子中可以看出,无论何时,类的所有实例的count值都是相同的,说明它们共享一个数据,count域只有一个副本。而每个实例的标号都是不同的,一旦实例化,标号就不再变化了。