文章目录
- 静态成员(`static`)
- 1、静态成员的特点:
- 2、为什么可以直接点出来使用?
- 3、不同的静态成员介绍
- 3.1. 静态字段
- 3.2. 静态方法
- 3.3. 静态属性
- 3.4. 静态构造函数
- 3.5. 静态类
 
- 4、静态成员的优缺点
- 优点:
- 缺点:
 
- 5、静态成员的使用场景
- 6、总结
 
- 专栏推荐
- 完结
静态成员(static)
 
用static修饰的成员变量、方法、属性等,称为静态成员。
1、静态成员的特点:
直接用类名点出使用
类名.静态成员名
2、为什么可以直接点出来使用?
程序中是不能无中生有的。我们要使用的对象,变量,函数都是要在内存中分配内存空间的。之所以要实例化对像,目的就是分配内存空间,在程序中产生一个抽象的对象。
静态成员的特点:
- 程序开始运行时就会分配内存空间。所以我们就能直接使用。
- 静态成员和程序同生共死。只要使用了它,直到程序结束时内存空间才会被释放。
- 一个静态成员就会有自己唯一的一个内存小房间,这让静态成员就有了唯一性,在任何地方使用都是用的小房间里的内容,改变了它也是改变小房间里的内容。
3、不同的静态成员介绍
3.1. 静态字段
静态字段是类级别的变量,在所有类的实例之间共享。
public class MyClass
{
    // 静态字段
    public static int staticField = 0;
    
    public void Increment()
    {
        staticField++;  // 可以在实例方法中访问静态字段
    }
}
public class Program
{
    public static void Main()
    {
        MyClass.staticField = 10;  // 通过类名访问静态字段
        Console.WriteLine(MyClass.staticField);  // 输出 10
        
        MyClass obj1 = new MyClass();
        obj1.Increment();  // 静态字段的值会被共享
        Console.WriteLine(MyClass.staticField);  // 输出 11
    }
}
3.2. 静态方法
静态方法是属于类的,而不是实例。你可以通过类名调用静态方法。
public class MathHelper
{
    // 静态方法
    public static int Add(int a, int b)
    {
        return a + b;
    }
}
public class Program
{
    public static void Main()
    {
        int result = MathHelper.Add(5, 3);  // 通过类名调用静态方法
        Console.WriteLine(result);  // 输出 8
    }
}
3.3. 静态属性
静态属性与静态字段类似,但它们提供了更好的封装,允许你在设置或获取值时添加逻辑。
public class Counter
{
    private static int count = 0;
    
    // 静态属性
    public static int Count
    {
        get { return count; }
        set { count = value; }
    }
    public static void Increment()
    {
        count++;
    }
}
public class Program
{
    public static void Main()
    {
        Counter.Count = 5;  // 通过类名设置静态属性
        Console.WriteLine(Counter.Count);  // 输出 5
        
        Counter.Increment();  // 通过静态方法修改静态字段
        Console.WriteLine(Counter.Count);  // 输出 6
    }
}
3.4. 静态构造函数
- 静态构造函数在类的第一次访问时自动调用。只会自动调用一次。
- 静态构造函数不接受任何参数,并且不能显式调用。
- 它通常用于初始化静态字段或执行一次性初始化任务。
- 不能使用访问修饰符
public class MyClass
{
    // 静态字段
    public static int staticField;
    // 静态构造函数
    static MyClass()
    {
        staticField = 10;  // 初始化静态字段
        Console.WriteLine("静态构造函数被调用");
    }
}
public class Program
{
    public static void Main()
    {
        // 静态构造函数会在第一次访问类的静态成员时被调用
        Console.WriteLine(MyClass.staticField);  // 输出 10,且输出 "静态构造函数被调用"
    }
}
3.5. 静态类
静态类是一种特殊类型的类,所有成员都必须是静态的。静态类不能实例化,也不能包含实例成员。
 比如我们一直用的Console就是一个静态类.
public static class Utility
{
    public static void PrintMessage(string message)
    {
        Console.WriteLine(message);
    }
}
public class Program
{
    public static void Main()
    {
        Utility.PrintMessage("Hello, World!");  // 通过静态类调用静态方法
    }
}
4、静态成员的优缺点
优点:
- 节省内存:由于静态成员是所有实例共享的,它们只会占用一次内存。
- 全局访问:静态成员可以在整个程序中被访问,适合做全局变量或工具函数。
缺点:
- 线程安全问题:静态成员是共享的,因此如果多个线程同时访问静态成员,可能会引发线程安全问题。需要小心同步。
- 无法实例化:静态类不能创建实例,因此无法进行继承或实现接口。
5、静态成员的使用场景
- 单例模式:静态成员通常用来实现单例模式,确保一个类只有一个实例。
- 全局常量或配置:静态字段或属性可以用来存储全局常量或配置数据。
- 工具类:静态方法非常适合用作工具类,提供通用的功能,如数学运算、字符串处理等。
6、总结
- 静态成员属于类本身,而不是类的实例。
- 静态字段和静态属性在所有实例之间共享。
- 静态方法和静态构造函数用于类级别的操作。
- 静态成员常用于工具类、全局配置、单例模式等场景。
- 特点:直接用类名点出来使用(全局性)
- 生命周期:和程序同生共死。程序运行后就会一直存在内存中,直到程序结束后才会释放,因此静态成员具有唯一性
- 注意: 
  - 静态函数中不能直接使用非静态成员
- 非静态函数中可以直接使用静态成员
 
专栏推荐
| 地址 | 
|---|
| 【从零开始入门unity游戏开发之——C#篇】 | 
| 【从零开始入门unity游戏开发之——unity篇】 | 
| 【制作100个Unity游戏】 | 
| 【推荐100个unity插件】 | 
| 【实现100个unity特效】 | 
| 【unity框架开发】 | 
完结
赠人玫瑰,手有余香!如果文章内容对你有所帮助,请不要吝啬你的点赞评论和关注,你的每一次支持都是我不断创作的最大动力。当然如果你发现了文章中存在错误或者有更好的解决方法,也欢迎评论私信告诉我哦!
好了,我是向宇,https://xiangyu.blog.csdn.net
一位在小公司默默奋斗的开发者,闲暇之余,边学习边记录分享,站在巨人的肩膀上,通过学习前辈们的经验总是会给我很多帮助和启发!如果你遇到任何问题,也欢迎你评论私信或者加群找我, 虽然有些问题我也不一定会,但是我会查阅各方资料,争取给出最好的建议,希望可以帮助更多想学编程的人,共勉~
 



















