C#学习笔记之六 类定义中static关键字的用法暨C#中静态变量的意义与使用

时间:2023-01-31 19:14:38

在定义类中的一个成员变量的时候,如果使用了static 关键字。那么这个类就只会 有这一个变量,称它是静态变量,它是属于这个类的,是类的专有的静态变量,而不是属于类的实例(对象)的。那么,属于这个类的静态变量,与该类之下对象的关系是什么呢?很容易想到,作为类专有的静态变量,应该是被类的所有对象的方法所共用的。

为了检测这个想法,我编写了如下的代码。我的思路是,定义一个Counter类,它有一个静态成员变量num,即计数器的数值。然后生成两个Counter实例。代码运行结果显示:这个静态变量是唯一的,每个实例对象都可以对它进行操作,它们操作的是唯一的这个静态变量。

<span style="font-size:18px;">using System;

namespace MakeoutStatic
{
class Counter {
public static int num;
public void clear()
{
num = 0;
}
public void count ()
{
num ++ ;
}
}

class Program {
public static void Main(string[] args)
{
Counter mycounter = new Counter();
Counter yourcounter = new Counter();
mycounter.clear();
int i;
for(i=0;i<10;i++)
mycounter.count();
Console.Write(Counter.num);
yourcounter.clear();
Console.Write(Counter.num);
Console.ReadKey();
}

}
}</span>

对Main函数中主要代码的解释:新建两个Counter对象。一个对象的clear方法将类的专有静态变量num清零即设为0,然后这个对象的count方法运行10次,也就是,将num增加10次。显示num的值。注意,num不是mycounter.num而是Counter.num,因为它是专有于类的,并不存在于对象中,对象只能对它进行操作。之后,用另一个对象的clear方法将num清零。显示num的值。
这段代码充分显示了类的静态变量专有于类公用于对象的特性。 同样,在类定义时,对一个函数使用了static关键字,那么它也是属于类专有的函数,它所使用的变量必须是静态变量即类的专有变量。所以,静态函数和静态变量都是在类的专属层面上运行。