静态字段简介
静态字段被类的所有实例共享,所有实例都访问同一内存位置。因此,如果该内存位置的值被一个实例改变了,这种改变对所有的实例都可见。
可以使用static修饰符将字段声明为静态。
使用静态字段的例子
代码如下所示:
internal class Program
{
class UseStatic
{
int val1;
static int val2;
public void SetVars(int v1,int v2)
{
val1 = v1;
val2 = v2;
}
public void Display(string str)
{
Console.WriteLine($"{str}:val1 = {val1},val2 = {val2}");
}
}
static void Main(string[] args)
{
UseStatic useStatic1 = new UseStatic();
UseStatic useStatic2 = new UseStatic();
useStatic1.SetVars(8,14);
useStatic1.Display("useStatic1");
useStatic2.SetVars(25,76);
useStatic2.Display("useStatic2");
useStatic1.Display("useStatic1");
}
}
运行结果,如下图所示:

本示例的图解,如下图所示:

其中val1是实例字段,val2是静态字段,main函数中定义了类UseStatic的两个实例useStatic1和useStatic2,静态成员val2是与所有实例的存储分开保存的。因为val2是静态的,因此类UseStatic的两个实例useStatic1和useStatic2共享同一个val2字段,只要val2被改变了,这个改变在两个实例中都能看到。
静态成员的生存期
静态成员的生命期与实例成员的不同。只有在实例创建之后才产生实例成员,在实例销毁之后实例成员也就不存在了。但是即使类没有实例,也存在静态成员,并且可以访问。
示例代码如下:
internal class Program
{
class UseStatic
{
int val1;
public static int val2;
}
static void Main(string[] args)
{
UseStatic.val2 = 666;
Console.WriteLine($"val2 = {UseStatic.val2}");
}
}
运行结果,如下图所示:

在main函数中,我们没有创建类UseStatic的实例,但也可以设置静态字段val2的值,并打印出来,但是要注意静态字段val2应该加上public修饰符。
静态函数成员
除了静态字段外,还有静态函数成员。如同静态字段,静态函数成员独立于任何类实例,即使没有类的实例,任然可以调用静态方法。
静态函数成员不能访问实例成员。
静态函数成员中使用实例成员编译器会报错,如下图所示:

然而,它们能访问其他静态成员,代码如下所示:
internal class Program
{
class UseStatic
{
int val1;
public static int val2;
public static void PrintVal()
{
Console.WriteLine(val2);
}
}
static void Main(string[] args)
{
UseStatic.val2 = 666;
UseStatic.PrintVal();
}
}
参考资料
《C#图解教程(第4版)》——Daniel M. Solis
原文始发于微信公众号(DotNet学习交流):C#中静态字段和静态函数成员
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/230866.html