单一实例中的输出参数

本文关键字:输出 参数 实例 单一 | 更新日期: 2024-10-31 04:52:09

以下胎面在单例模式中安全吗?我在 http://csharpindepth.com/Articles/General/Singleton.aspx 中使用了第四个单例模式

我担心使用输出参数会破坏整个主体。

public sealed class eCacheContent
{
        private static readonly eCacheContent instance = new eCacheContent();
        private ICacheManager _Cache = CacheFactory.GetCacheManager(ConfigurationManager.AppSettings["ContentCache"].ToString());
        // for access method control locking
        private static object syncRoot = new object();
        // Explicit static constructor to tell C# compiler
        // not to mark type as beforefieldinit
        static eCacheContent() { }
        private eCacheContent() { }
        public static eCacheContent Instance
        {
            get
            {
                return instance;
            }
        }
        public bool TryGetValue(string key, out eContent output)
        {
            lock (syncRoot)
            {
                if (Contains(key))
                {
                    ObjectCloner helper = new ObjectCloner();
                    eContent tmp = (eContent)this._Cache.GetData(key);
                    output = helper.Clone(tmp);
                    return true;
                }

                output = new eContent();
                return false;
            }
        }
        public void Add(string key, object value)
        {
            // Initiase the helper class for cloning
            if (CheckKeyIfValid(key))
            {
                ObjectCloner helper = new ObjectCloner();
                // Remove if already exist
                this.Remove(key);
                // Add carbon copy
                _Cache.Add(key, helper.Clone(value));
            }
        }
        public void Flush()
        {
            _Cache.Flush();
        }
        private bool Contains(string key)
        {
            if (CheckKeyIfValid(key))
                return _Cache.Contains(key);
            else
                return false;
        }
        private void Remove(string key)
        {
            if (Contains(key))
            {
                _Cache.Remove(key);
            }
        }
        private bool CheckKeyIfValid(string key)
        {
            if ((key != null) && (key.Trim().Length != 0))
                return true;
            return false;
        }
    } 

单一实例中的输出参数

我担心使用输出参数会破坏整个主体。

您认为out参数以何种方式破坏了单例原理?根据定义,单例类"将类的实例化限制为一个对象" - 您的Instance属性可确保这一点。

您的TryGetValue方法是用于提取eContent缓存版本的辅助方法,这与eCacheContent类完全分开。