释放并重新实例化新的单例

本文关键字:单例 实例化 释放 | 更新日期: 2023-09-27 18:07:19

我想从原始的单例对象中取消内存分配,并使用另一个方法创建一个新对象。

public sealed class ObjectZ {
    static readonly ObjectZ _instance = new ObjectZ();
    private ObjectZ() {}
    public static ObjectZ Instance{
        get { return _instance; }
    }
}

这个方法是什么样子的?

释放并重新实例化新的单例

单例通常创建一次,并在域的生命周期内存在,重新创建单例是一件危险的事情,根据定义,我提供的代码并不是真正的单例。

你似乎是之后的行为是一个静态可访问的单对象缓存,可以无效。

public static class SingletonAccessor
{
    private static SomeClass _instance;
    private static object _lock = new Object();
    public static SomeClass Singleton
    {
        get
        {
            lock (_lock)
            {
                if (_instance == null)
                {
                    _instance = new SomeClass();
                }
                return _instance;
            }
        }
    }
    public static void Recycle()
    {
        lock (_lock)
        {
            if (_instance != null)
            {
                // Do any cleanup, perhaps call .Dispose if it's needed
                _instance = null;
            }
        }
    }
}