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");

        }
    }

运行结果,如下图所示:

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

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

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

其中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}");
        }
    }

运行结果,如下图所示:

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

在main函数中,我们没有创建类UseStatic的实例,但也可以设置静态字段val2的值,并打印出来,但是要注意静态字段val2应该加上public修饰符。

静态函数成员

除了静态字段外,还有静态函数成员。如同静态字段,静态函数成员独立于任何类实例,即使没有类的实例,任然可以调用静态方法。

静态函数成员不能访问实例成员。

静态函数成员中使用实例成员编译器会报错,如下图所示:

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

然而,它们能访问其他静态成员,代码如下所示:

    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#中静态字段和静态函数成员

参考资料

《C#图解教程(第4版)》——Daniel M. Solis


原文始发于微信公众号(DotNet学习交流):C#中静态字段和静态函数成员

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/230866.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!