真是不够聪明:老外写的程序看得头疼?帮位大哥指点一下!我的理解:把反射的类结构信息存入静态哈希表中?  但不理解他为什么要这么做?
目的是什么?是深度拷贝还浅拷贝?1、一个拷贝抽象类:    [Serializable]
    public abstract class CSCopy
    {
        private static readonly Hashtable objects = new Hashtable();        protected object CreateNewInstance()
        {
            ConstructorInfo ci = objects[this.GetType()] as ConstructorInfo;
            if(ci == null)
            {
                ci = this.GetType().GetConstructor(new Type[0]);
                objects[this.GetType()] = ci;
            }            return ci.Invoke(null);
        }        public virtual object Copy()
        {
            return CreateNewInstance();   
        }
    }
2、实际应用:public class IndexPost : CSCopy
{
        /// <summary>
        /// 重写拷贝
        /// </summary>
        /// <returns></returns>
        public override object Copy()
        {
            IndexPost post = base.Copy () as IndexPost;     post.BestMatch = this.BestMatch;
            post.Body = this.Body;
            post.Title = this.Title;
        }
   。。
}
IndexPost post = base.Copy () as IndexPost;不明白他为什么要这样做呢?是深度拷贝还浅拷贝?按我的理解:如果深度拷贝应该用:IndexPost post = new IndexPost();这不是更加简洁吗?老外为什么要又反射又拷贝,啥意思啊?睬不透老外的奥妙之处?特向各位大哥求教了。

解决方案 »

  1.   

    这个实际上是种统一调配的单件模式,如果一个类未被创建他就创建并加入hashtable里,如果他已被创建则直接调用hashtable里缓存的实例
    呵呵,坛子里不是有人经常问一个窗口如何只显示一次,实际上面的代码就是一种解决方案
      

  2.   

    即使是从缓存中取出, 但是每次都要这样:
    return ci.Invoke(null); 似呼也是相当消耗资源啊??? 他为什么要这么做, 想不通啊.
      

  3.   

    即使是从缓存中取出, 但是每次都要这样: 
    return ci.Invoke(null); 似呼也是相当消耗资源啊??? 他为什么要这么做, 想不通啊.
      

  4.   

    和Singleton设计模式有点相似么
    呢好处就是和Singleton一样,多线程下,保证这个类只会实例化一次,所有的线程都共享同一个类的数据
      

  5.   

    呵呵,上面不是已经说了嘛!
    这个就是一种单件模式的变相实现,也就是说他始终只new了一个对象看你自己的需求,你是否遇到过这样的要求:一个对象有且只能有一个实例的调用。
      

  6.   

    LZ去看看设计模式里的创建型部分吧.好像是builder模式,有一种应用就是用序列化做深拷贝和用反射去获得实例.