Csharp/C#教程:C# – 单例模式分享


C# – 单例模式

正如你从我的免费精选名字大全中看到的那样,我是新手,实际上是在学习Singleton模式,我遇到了一个问题。 在我了解到静态构造函数总是在标准构造函数之前执行之前,但在下面的代码中,结果是不同的,首先我看到“Insta”字符串然后是“静态”,为什么会发生?

sealed class Singleton { private static readonly Singleton instance; private Singleton() { Console.WriteLine("Insta"); } static Singleton() { instance = new Singleton(); Console.WriteLine("Static"); } public static Singleton Instance { get { return instance; } } } class Program { static void Main() { Singleton s1 = Singleton.Instance; } } 

如果你会写

 static Singleton() { Console.WriteLine("Static"); //THIS COMES FIRST instance = new Singleton(); } 

你会看到你的期望

首先执行static ctor,正如预期的那样,但是在instance = new Singleton(); 之后在控制台上打印 line,但是这行执行实例ctor,所以“inst”。

所以执行流程:

  • “静态的”
  • 有关单例模式的质量说明,请参见此处的MSDN模式。

    MSDN建议你应该写如下,所以它是线程安全的:

     using System; public sealed class Singleton { private static volatile Singleton instance; private static object syncRoot = new Object(); private Singleton() {} public static Singleton Instance { get { if (instance == null) { lock (syncRoot) { if (instance == null) instance = new Singleton(); } } return instance; } } } 

    顺便说一句,这种模式比静态构造函数具有以下优势:

    在对象请求实例之前不执行实例化; 这种方法称为惰性实例化。 延迟实例化避免在应用程序启动时实例化不必要的单例。

    看看这是否符合您的需求,如果是,请实施此解决方案。

    首先调用静态方法。 这是certificate – 将您的代码更改为以下内容:

    上述就是C#学习教程:C# – 单例模式分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

     static Singleton() { Console.WriteLine("Static method start"); instance = new Singleton(); Console.WriteLine("Static method end"); } 

    本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

    ctvol管理联系方式QQ:251552304

    本文章地址:https://www.ctvol.com/cdevelopment/983261.html

    (0)
    上一篇 2021年12月19日
    下一篇 2021年12月19日

    精彩推荐