真是不够聪明:老外写的程序看得头疼?帮位大哥指点一下!我的理解:把反射的类结构信息存入静态哈希表中? 但不理解他为什么要这么做?
目的是什么?是深度拷贝还浅拷贝?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();这不是更加简洁吗?老外为什么要又反射又拷贝,啥意思啊?睬不透老外的奥妙之处?特向各位大哥求教了。
呵呵,坛子里不是有人经常问一个窗口如何只显示一次,实际上面的代码就是一种解决方案
return ci.Invoke(null); 似呼也是相当消耗资源啊??? 他为什么要这么做, 想不通啊.
return ci.Invoke(null); 似呼也是相当消耗资源啊??? 他为什么要这么做, 想不通啊.
呢好处就是和Singleton一样,多线程下,保证这个类只会实例化一次,所有的线程都共享同一个类的数据
这个就是一种单件模式的变相实现,也就是说他始终只new了一个对象看你自己的需求,你是否遇到过这样的要求:一个对象有且只能有一个实例的调用。