静态字段静态函数成员常量

Posted 小洋大海

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了静态字段静态函数成员常量相关的知识,希望对你有一定的参考价值。

  静态字段:


 

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

  □ 访问静态变量通过类名.字段名访问

  □ 即使类没有实例任何对象,也存在静态字段。如果静态字段有初始化语句,不必要在程序执行之前就赋初始值,可以在使用该字段前再赋值(这点与const常量不一样,const常量是声明就赋值)

例如:

    class Program
    {
        static void Main(string[] args)
        {
            MyClass myclass1 = new MyClass();
            MyClass myclass2 = new MyClass();

            myclass1.PrintNum();
            myclass2.PrintNum();

            myclass1.Num = 10;

            myclass1.PrintNum();
            myclass2.PrintNum();

            MyClass._num = 20;

            myclass1.PrintNum();
            myclass2.PrintNum();

            Console.ReadKey();
            
        }
    }

    class MyClass
    {
        public static int _num = 0;

        public int Num
        {
            get { return _num; }
            set { _num = value; }
        }

        public void PrintNum()
        {
            Console.WriteLine(_num);
        }
    }

  输出是:

  0 0 10 10 20 20(打竖)

  Tip:静态字段可以被实例改变值,但是不能通过实例.静态字段名来改变,但可以通过实例内部调用的函数改变值(如属性)。因为静态字段是类的共有字段,不能被实例化成实例对象的字段。


  静态函数


  □ 如同静态字段,即使类没有实例化对象,也可以调用静态函数,调用方法同样是:类名.静态函数名

  □ 静态函数不能访问实例成员。它可以访问其他静态成员。


可以声明为静态的类成员类型:

数据成员(储存数据):字段、类型

函数成员(执行代码):方法、属性、构造函数、运算符、事件


  成员常量


 

  □  所谓成员常量而非常量,是因为C#不像C和C++拥有全局常量,每个常量都必须声明在类里面,只能是类的成员。

  □  成员常量表现的像静态量一样,但是不能被static关键字修饰。与真正的静态量不同,常量没有自己的存储位置,而是在编译时被编译器替换。

例如:

    class Program
    {
        static void Main(string[] args)
        {
            MyClass myclass = new MyClass();


            Console.WriteLine(MyClass._num);
            Console.ReadKey();
            
        }
    }

    class MyClass
    {
        public const int _num = 20;
    }

输出:20

  在使用常量同样是函数名.常量名

 

  

以上是关于静态字段静态函数成员常量的主要内容,如果未能解决你的问题,请参考以下文章

实用工具类的静态成员(null)生命周期

静态修饰符static,类中的常量定义修饰符

常量表达式中的静态成员访问

静态常量非整形成员变量的初始化问题

| 9 |错误:无效使用非静态数据成员'Matrix :: row'| 9 |错误:数组绑定不是']'令牌之前的整数常量|

类的静态成员