C#静态成员

55 阅读2分钟
静态成员基本概念
1.用static修饰的 成员变量、成员方法、成员属性等被称为静态成员
2.静态成员特点:共享,整个程序都可以使用
3.静态成员使用方法:类名.(成员变量名、成员方法名、成员属性名)
    //定义静态变量
    class Student
    {
        public static string teacherName;
    }
    //使用静态变量
    Student.teacherName = "张三";
    Console.WriteLine(Student.teacherName);
4.静态方法的使用
    class Test
    {
        public static float PI = 3.14f;
        //定义静态方法
        public static float Circle(float r)
        {
            return PI * r * r;
        }
    }
    //使用静态方法
    float result = Test.Circle(3);
    Console.WriteLine(result);
静态成员存储方式
1.静态成员在内存中有单独的存储位置
2.静态成员和程序同生共死,程序一运行就被创建,程序一结束就被销毁
3.静态成员被创建时无需先实例化对象,它创建在实例化对象之前
4.静态成员过多会极大占用内存
5.静态成员具有唯一性
静态函数中不能使用非静态成员
        public static float PI = 3.14f;
        private int num = 100;
        public static float Circle(float r)
        {
            Console.WriteLine(num); //会报错
            return PI * r * r;
        }
原因:非静态成员只有将对象实例化后才会存在,没有实例化对象前是不存在的,
      而静态函数是程序一运行就存在,非静态成员如果一直没实例化对象,
      代表值不存在,所以静态函数不能使用不存在的值
非静态函数可以使用静态成员
    class Test
    {
        public static float PI = 3.14f;
        private int num = 100;
        public void Show()
        {
            Console.WriteLine(PI); //不会报错
        }
    }
原因:静态成员程序一运行就存在,不管什么时候实例化对象,静态成员都存在,随时都可以使用
常量和静态变量
1.const(常量)为特殊的static(静态)
2.相同点:他们都可以通过(类名.名字)方法使用
3.不同点:
    1.const必须初始化,不能修改 static没有这个规则
    2.const只能修饰变量,static 可以修饰很多
    3.const 一定是写在访问修饰符后面的,static 没有这个要求
    
    class Test
    {
        //const必须初始化,不能修改 static没有这个规则
        public const int score1 = 0;
        public static int score2;

        //const 一定是写在访问修饰符后面的,static 没有这个要求
        public const int age1 = 18;
        static public int age2 = 20;

        //const只能修饰变量,static 可以修饰很多
        public static void Show()
        {
            Console.WriteLine(score1);
            Console.WriteLine(score2);
        }
    }