C#静态成员

一、静态成员的本质

1.概念:

用static修饰的成员变量、方法、属性等

静态成员属于类本身,而不是类的实例。想象成一个班级的公共财产:

  • 实例成员:每个学生(对象)自带的书包(每个对象独有)

  • 静态成员:教室里的公共黑板(所有对象共享)

示例:

class Student {
    public string Name;          // 实例成员(每个学生自己的名字)
    public static int Count;     // 静态成员(统计学生总数)
}

2.特点:

不需要创建对象,通过类名直接访问

示例:

Student.Count = 10;  // ✅ 直接使用
Student stu = new Student();
stu.Name = "小明";    // ✅ 实例成员需要对象

二、静态成员的使用

静态成员可以直接通过类名点出来使用,实例成员需要实例化对象,通过对象名来点出使用。

using System;

namespace C_面向对象
{

    class Test
    {
        //静态成员变量
        public static float PI = 3.1415926f;
        //实例成员变量
        public int testInt = 100;

        //静态方法
        public static float CalcCircle(float r)
        {
            return PI * r *r;
        }

        //实例方法
        public void TestFun()
        {
            Console.WriteLine("/实例方法");
        }
    }

    internal class Program
    {
        static void Main(string[] args)
        {
            //静态成员使用
            //直接类名点出使用
            Console.WriteLine(Test.PI);
            Console.WriteLine(Test.CalcCircle(2));

            //实例成员使用
            //需要实例化出一个对象
            Test t  = new Test();   
            Console.WriteLine(t.testInt);
            t.TestFun();
        }
    }
}

三、为什么可以直接通过类名来点出使用

1.解释:

我们都知道,程序中是不能无中生有的,我们要使用的对象,变量,函数都是要在内存中分配内存空间的,之所以要实例化对现象,目的是分配内存空间在程序中产生一个抽象的对象。

依据静态成员的特点,

程序在开始运行时就会为静态成员分配内存空间,所以可以直接使用。

静态函数中不能使用实例成员(非静态成员)。

实例成员函数可以使用静态变量。

2.注意:

静态成员与程序同生共死,只要使用了它,直到程序结束是内存空间才会被释放,所以,一个静态成员就会有自己唯一的一个“内存小空间”,这让静态成员有了唯一性。

在任何时候使用都是用的“小房间”里的内容,改变了它也是改变“小房间”里的内容。

3.静态成员与实例成员的区别:

详细来说,

1)、内存分配原理

1.类级别的存储

  • 静态变量在程序加载类时就被分配内存(位于静态存储区

  • 实例变量只有在对象创建时才会分配内存(位于堆内存

2.生命周期不同

  • 静态变量生命周期 ≈ 程序运行周期

  • 实例变量生命周期 ≈ 对象存活周期

class MyClass {
    public int InstanceValue;       // 实例变量:随对象创建/销毁
    public static int StaticValue;  // 静态变量:程序启动到结束存在
}

2)、访问机制对比

访问方式静态变量实例变量
内存准备时机类首次被访问时初始化对象实例化时初始化
访问依赖无需对象实例必须通过对象实例
数据副本数量全类共享唯一副本每个对象独立副本

示例:

// 静态变量直接通过类访问
MyClass.StaticValue = 10;  // ✅

// 实例变量必须通过对象
MyClass obj = new MyClass();
obj.InstanceValue = 20;     // ✅

四、静态成员的作用

静态变量

1.常用唯一的变量申明。

2.方便别人获取对象申明。

静态方法

常用的唯一的方法申明,比如相同规则的数学计算相关的函数。

五、常量和静态变量

const(常量) 可以理解为特殊的static(静态)

相同点:

他们都可以通过类名直接点出使用。

不同点:

1.const必须初始化,不能修改,static没有这个规则。

2.const自能修饰变量,static可以修饰很多。

3.const一定要写在访问修饰符的后面,static 没有这个要求。

六、总结

概念:用static修饰的成员变量、成员方法、成员属性等就成为静态成员。

特点:直接用类名点出(全局性)。

生命周期:和程序同生共死(程序运行后会一直存在在内存中,直到程序结束,具有唯一性)。

注意:

静态函数中不能使用实例成员(非静态成员)。

实例成员函数可以使用静态变量。

常量与静态变量区别:

const(常量) 可以理解为特殊的static(静态)

相同点:

他们都可以通过类名直接点出使用。

不同点:

1.const必须初始化,不能修改,static没有这个规则。

2.const自能修饰变量,static可以修饰很多。

3.const一定要写在访问修饰符的后面,static 没有这个要求。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值