C#中静态字段和静态函数成员

静态字段简介

静态字段被类的所有实例共享,所有实例都访问同一内存位置。因此,如果该内存位置的值被一个实例改变了,这种改变对所有的实例都可见。

可以使用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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值