C# 静态类中构造、字段和属性等的执行顺序,含有单例模式分析

C# 静态类时我们实战项目开发中用的非常多的。有些时候可能他的执行顺序并非如我们认为的那样,那就快速来看一下吧!

在C#中,静态类的构造函数是在第一次访问该类的任何成员时执行的。静态构造函数是不可继承的,并且在访问静态类的任何静态成员之前,自动执行静态构造函数。

静态构造函数通常用于初始化静态类的静态成员,并且它们在静态类的生命周期内只执行一次。

静态类中的字段和属性的执行顺序与它们在类定义中的顺序相同。字段首先初始化,然后是属性

这里重点在于: 不管你是否访问字段,只要访问了静态类,所有的字段第一时间,按照顺序都初始化;但是对于属性,不会都初始化,不管你属性的定义顺序,永远也是等第一用时,才会初始化这个属性。

而构造函数,就是你用单例的new时,才会被第一次调用,所以基本上晚于第一个属性创建时。

下面是一个示例代码,演示了静态类中构造函数、字段和属性的执行顺序:

 

using System;
 
public class Program
{
    static Program()
    {
        Console.WriteLine("静态构造函数被执行");
    }
 
    public static int StaticField = PrintAndReturn(1, "静态字段初始化");
 
    public static int StaticProperty
    {
        get
        {
            Console.WriteLine("静态属性被访问");
            return PrintAndReturn(2, "静态属性返回值");
        }
    }
 
    public static int PrintAndReturn(int value, string message)
    {
        Console.WriteLine(message);
        return value;
    }
 
    static void Main()
    {
        Console.WriteLine("Main方法开始执行");
        Console.WriteLine($"StaticField: {Program.StaticField}" );
        Console.WriteLine($"StaticProperty: {Program.StaticProperty}" );
    }
}
  1. 常用的懒加载线程安全单例,规范的常用写法:

public class Singleton
{
    private static Singleton instance = null;
    private static readonly object padlock = new object();
 
    Singleton()
    {
    }
 
    public static Singleton Instance
    {
        get
        {
            if (instance == null)
            {
                lock (padlock)
                {
                    if (instance == null)
                    {
                        instance = new Singleton();
                    }
                }
            }
            return instance;
        }
    }
}

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
单例模式和多例模式是设计模式的两种常见实现方式。 单例模式是一种创建对象的模式,它保证一个类只有一个实例,并提供一个全局访问点来访问该实例。在C#,可以通过使用静态变量和私有构造函数来实现单例模式。以下是一个示例: ```csharp public class Singleton { private static Singleton instance; private Singleton() {} // 私有构造函数 public static Singleton Instance { get { if (instance == null) { instance = new Singleton(); } return instance; } } } ``` 使用单例模式可以确保在整个应用程序只有一个实例存在,并且可以通过`Singleton.Instance`来访问该实例。 多例模式是一种可以创建有限个数实例的模式,它保证一个类最多只有指定个数的实例,并提供一个全局访问点来访问这些实例。在C#,可以使用类似于单例模式的方式来实现多例模式,只需稍作修改即可。以下是一个示例: ```csharp public class Multiton { private static Dictionary<string, Multiton> instances = new Dictionary<string, Multiton>(); private Multiton() {} // 私有构造函数 public static Multiton GetInstance(string key) { if (!instances.ContainsKey(key)) { // 创建新实例并添加到字典 instances[key] = new Multiton(); } return instances[key]; } } ``` 使用多例模式可以创建指定个数的实例,并且可以通过`Multiton.GetInstance(key)`来访问这些实例,其`key`是用于区分不同实例的标识符。 这是单例模式和多例模式的简单介绍,它们在实际开发有各自的应用场景,具体使用哪种模式取决于实际需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值