当前位置: 首页 > news >正文

C#中的static关键字:静态成员与单例模式的实现

在C#中,static 关键字是一个非常重要的概念,它用于声明静态成员,这些成员属于类本身,而不是类的任何特定实例。使用 static 关键字可以定义静态类、静态字段、静态属性、静态方法等。此外,理解静态成员也对于实现如单例模式这样的设计模式至关重要。

静态类

静态类主要用于包含一组不依赖于对象实例的静态方法。静态类不能被实例化,且只能包含静态成员。

public static class MathUtils
{public static int Add(int a, int b){return a + b;}
}// 使用
int sum = MathUtils.Add(5, 3);

静态字段

静态字段在类的所有实例之间共享。即,无论创建了多少个类的实例,静态字段都只有一份拷贝。

public class Program
{public static int staticField = 0;static void Main(string[] args){Program p1 = new Program();Program p2 = new Program();p1.staticField = 5;Console.WriteLine(p2.staticField); // 输出 5}
}

静态属性

静态属性提供了对静态字段的访问方式,与静态字段相似,它们也在类的所有实例之间共享。

public class Program
{private static int _staticProperty = 0;public static int StaticProperty{get { return _staticProperty; }set { _staticProperty = value; }}static void Main(string[] args){Program.StaticProperty = 10;Console.WriteLine(Program.StaticProperty); // 输出 10}
}

静态方法

静态方法不需要类的实例即可被调用,并且不能访问类的非静态成员(除非通过对象实例)。

public class MathHelper
{public static int Multiply(int a, int b){return a * b;}
}// 使用
int product = MathHelper.Multiply(4, 5);

单例模式

单例模式确保一个类只有一个实例,并提供一个全局访问点。虽然单例模式不直接使用 static 关键字,但通常会用到静态字段来存储类的唯一实例,并使用静态方法来访问这个实例。

public class Singleton
{// 静态字段,存储类的唯一实例private static Singleton _instance;// 私有构造函数,防止外部实例化private Singleton() {}// 静态方法,提供全局访问点public static Singleton Instance{get{if (_instance == null){_instance = new Singleton();}return _instance;}}
}// 使用
Singleton singleton = Singleton.Instance;

注意:在多线程环境下,上述单例实现方式可能会导致问题(例如,多个线程可能同时创建实例)。通常,需要额外的同步机制(如使用 lock 关键字)或利用更高级的单例实现技术(如双重检查锁定、使用.NET内置的Lazy<T>类)来确保线程安全。


http://www.mrgr.cn/news/41281.html

相关文章:

  • 在Linux系统安装Nginx
  • Java与C++差异解析
  • 【Linux】进程间关系与守护进程
  • 这家国内AI公司如此烧钱,智算集群GPU卡高达5.4万张
  • 认识动态规划算法和实践(java)
  • Dijkstra最短路径算法
  • CMake所学
  • 想入职网络安全?真实面试--渗透测试工程师(一)!(全网独一份)
  • 小程序-使用npm包
  • 【mmsegmentation】Loss模块(进阶)自定义自己的LOSS
  • 【前沿 热点 顶会】NIPS/NeurIPS 2024中与强化学习有关的论文
  • 小程序echarts不滑动问题
  • 【STM32 Blue Pill编程实例】-SSD1306 OLED显示屏(I2C)
  • CSP-J模拟赛(2)补题报告
  • java中创建不可变集合
  • Pandas数据类型
  • 第2篇:Linux日志分析----应急响应之日志分析篇
  • 模版and初识vector
  • Java hashcode设计与实现
  • 听说这是MATLAB基础?