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 に答える