1

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

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

这种方法会是什么样子?

4

1 回答 1

2

单例通常创建一次并在域的生命周期内存在,重新创建单例是不可靠的业务,并且根据定义,我提供的代码并不是真正的单例。

您似乎所追求的行为是可以使静态可访问的单个对象缓存无效。

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;
            }
        }
    }
}
于 2013-04-02T23:09:14.170 回答