从类的外部访问静态成员
在前一章中,我们看到使用点运算符可以从类的外部访问public实例成员。点运算符由实
例名、点和成员名组成。
就像实例成员,静态成员也可以使用点运算符从类的外部访问。但因为没有实例,所以最常
用的访问静态成员的方法使用类名,如下面的代码所示:
访问静态成员的另一种方法根本不需要使用前缀,只需在该成员所属的类中包含一个using
static声明,如下所示:
using static System.Console; //在其他成员中包含WriteLine()
using static System.Math; //在其他成员中包含Sqrt()....WriteLien($"The square root of 16 is {Sqrt(16)}");
等价于
using System;...Console.WriteLine($"The square root of 16 is {Math.Sqrt(16)}");
说明 在这两种访问静态成员的方法中进行选择时,应该考虑哪种方法的代码对你和维护代码
的人来说更加清晰易懂。
静态字段示例
下面的代码扩展了前文的类D,增加了两个方法:
- 一个方法设置两个数据成员的值。
- 另一个方法显示两个数据成员的值。
class D
{int Menm1;static int Mem2;public void SetVars(int v1,int v2)//设置值{Menm1=v1;Mem2=v2;//像访问实例字段一样访问它}public void Display(string str){Console.WriteLine("{0}:Mem1={1},Mem2={2}",str,Menm1,Mem2);}
}class Program
{static void Main(){D d1=new D(),d2=new D();//创建两个实例d1.SetVars(2,4); //设置d1的值d1.Display("d1");d2.SetVars(15,17); //设置d2的值d2.Display("d2");d1.Display("d1"); //再次显示d1//注意,这时Mem2静态成员的值已改变}
}
静态成员的生存期
静态成员的生命期与实例成员的不同。
- 之前我们已经看到了,只有在实例创建之后才产生实例成员,在实例销毁之后实例成员
也就不存在了。 - 但是即使类没有实例,也存在静态成员,并且可以访问。
图7-4阐述了类D,它带有一个静态字段Mem2。虽然Main没有定义类D的任何实例,但它把
值5赋给该静态字段并毫无问题地把它打印了出来。