LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

C# 静态类static,高手不想让你知道的 15 个真相

admin
2024年10月30日 14:13 本文热度 508

前言

嗨,大家好!

在 C# 面向对象编程的海洋中,类(Class)是支撑我们代码的重要基石,而静态类则是这个基础中的一块璞玉。你可能在编程的旅途中听说或使用过静态类,它到底是什么呢?

简单来说,如果一个类里仅包含静态成员和静态方法,那它就可以被称为静态类,通常我们会用 static 修饰符来标识它,例如:

/// <summary>
/// 使用 static 修饰符定义静态类
/// </summary>
static class StaticDemo
{    
    // 声明静态字段
    private static string staticString = "static string";

    // 声明静态属性
    public static string StaticString
    {
        get { return staticString; }
        set { staticString = value; }
    }
    
    // 实现静态方法
    public static void ShowMsg()
    {
        Console.WriteLine(StaticString);
    }

    public static void Main()
    {
        // 访问静态方法
        // 为了演示,这里使用 类.方法 的方式访问,实际开发中是不需要的
        StaticDemo.ShowMsg();
    }
}

接下来,我将和大家分享我总结的关于使用静态类的15个经验,希望能为你的项目带来灵感和帮助!

使用经验总结

1. 保持纯粹

如果一个类只包含静态成员和静态方法,建议最好将它标记为 static,并声明一个私有构造函数,以防止其他程序员在类的范围之外实例化类的实例。

2. 天然密封

编译器会自动将静态类标记为密封类(sealed),这意味着它不能被继承,确保了其成员的安全性和不可变性。

3. 静态构造函数

静态类可以包含静态构造函数,用于初始化类中的静态成员,包括静态字段和静态属性,但只能执行一次,要注意的是,静态构造函数不能带参数和访问修饰符如 public,比如:

static StaticDemo() 
{
    staticString = "静态字符串";
}

静态字段可以在声明时初始化,也可以通过静态构造函数进行初始化,静态构造函数会覆盖声明时的初始化值。

一般来说,简单的静态成员在声明时进行初始化即可,复杂的静态成员才建议选择在静态构造函数中进行初始化。

4. 简化访问

静态属性和静态方法只能由类自身访问,这使得直接通过类名调用静态方法,无需实例化对象,从而让代码调用变得更加简单

5. 调用快速

由于无需实例化,静态方法的调用速度往往更快。

6. 内存使用效率高

静态类只有一个实例,所以相对于多个实例来说,它在内存使用上更为高效,能够用更少的内存存储相同的功能,就像一个精明的家庭主妇,总是能把每一分钱都花在刀刃上

7. 编译期绑定

静态方法是在编译期绑定的,这意味着它们在运行时不需要额外的查找和解析过程,从而提高了性能

8. 常驻内存

静态方法和字段是常驻内存的,这意味着它们在整个程序运行期间都会占用内存空间。所以,用得着的时候它们就在那儿,用不着的时候……它们也在那儿。

9. 不能引用 this

普通类中的静态方法不能引用 this 关键字访问,否则会引起编译时错误

10. 不能被虚拟化和覆写

普通类中的静态方法不能被标记为 virtualabstract 或者 override,可以被派生类访问,但是不能被派生类覆写,就像是一首经典老歌,你只能欣赏,不能篡改

11. 无法实现接口

静态类无法实现接口,因为 CLS(通用语言规范)不允许接口有静态成员,这一点在实际开发之中可能会给语言之间的交互带来问题

12. 全局共享

静态类的成员在应用程序的所有实例中共享。这使得静态类非常适合执行全局工具函数的场景,例如:

  • 工具类:静态类常用于实现工具函数,如数学计算、字符串处理等
  • 线程池:静态类可以用于管理线程池,提供全局的线程管理功能
  • 全局服务:静态类可以用于提供全局的服务或配置,如常量、日志记录、配置管理等

13. 线程安全

使用静态类时要注意,必须确保它们是线程安全的,在多线程环境中,静态变量可能会导致数据不一致。

建议在多线程中,在访问静态成员时,使用 lock 关键字来确保同一时间只有一个线程能够访问该成员,比如:

private static object _lock = new object();
public static void SomeMethod()
{
    lock (_lock)
    {
        // 执行线程安全的操作
    }
}

这种方法可以有效地防止多个线程同时修改静态成员导致的数据不一致问题。

14. 谨慎使用集合

如果静态类中需要使用集合类(如 List<T>),建议使用 C# 提供的线程安全集合类,例如 ConcurrentBag<T> 或 ConcurrentQueue<T>。这些集合类在多线程环境下自动处理并发操作,避免数据损坏。

15. 避免过度使用

过度使用静态类可能导致代码耦合度过高,降低代码的可维护性,建议按需使用静态类

最后

静态类在 C# 中是一个强大的特殊类,了解它的特性和最佳实践,可以帮助我们在项目中更有效地利用它的优势,让它发挥更大的作用!


该文章在 2024/10/30 15:12:44 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2024 ClickSun All Rights Reserved