单例类的序列化实现

    技术2022-05-20  44

        /*     * 单例类  序列化     *      *      */

        /// <summary>    /// 该类为单例类,即整个域中只应该现在一个实例,因此在反序列化中要考虑不能创建多个实例    /// </summary>    [Serializable]    public class SingletonSerialization: ISerializable    {        private static readonly SingletonSerialization _theOneObject = new SingletonSerialization();

            public string strName = "ABC";        public DateTime date = DateTime.Now;

            private SingletonSerialization() { }

            public static SingletonSerialization GetSingleton()        {            return _theOneObject;        }

     

            //该类不需要定义SingletonSerialization(SerializationInfo info, StreamingContext context)构造函数,因为永远不会调用它

     

            #region ISerializable 成员

     

            [SecurityPermissionAttribute( SecurityAction.Demand, SerializationFormatter = true)]        void ISerializable.GetObjectData(SerializationInfo info, StreamingContext context)        {            info.SetType(typeof(SingletonSerializationHelper));

     

                //该方法没有添加任何值,只是对序列化信息对象赋了一个类型,相当于做了一个伪装。

                //告诉序列化器,我要序列化的对象不是SingletonSerialization类而是SingletonSerializationHelper类        }

     

            #endregion    }

     

        // 继续IObjectReference接口表示,当前类为某一真实对象的引用

        public sealed class SingletonSerializationHelper : IObjectReference    {        #region IObjectReference 成员

     

            //当序列化器发现该类继续IObjectReference接口时,会自动调用该方法

            object IObjectReference.GetRealObject(StreamingContext context)        {            return SingletonSerialization.GetSingleton();        }                #endregion    }


    最新回复(0)