CommunityServer 2.1 的 CSCopy 类
分类:ASP.NET|评论:0 条|阅读:1761 次|posted @ 2007年1月10日 11:06:10此类支持序列化,此类的主要动作是根据子类的默认构造函数创建一个子类实例,objects 字段是 Hashtable 类型,存放一个键值对,它的键的类型是 Type 类型,值类型是 ConstructorInfo 类型,也就是它存放的是代表子类的构造函数的类型,作用是利用此构造函数类实例 Invoke 出子类的一个实例。
CSCopy 类还有一个虚拟的成员函数 Copy(),一般地,子类继承时重写此类,然后在子类的 Copy() 函数里调用基类的 CreateNewInstance() 函数(或用 base.Copy())创建对象后,将子类中各成员变量的值赋给新创建的实例。如:
public override object Copy()
{
Thread thread = base.Copy() as Thread; // 调用 Thread 类的默认构造函数创建的实例
// 以下的赋值是将当前对象(看到都用 this 了吧)的各成员变量的值赋给新对象,
// 也就等于 Copy 一个副本,呵呵,从类名都可以看出来
thread.MostRecentPostAuthor = this.MostRecentPostAuthor;
thread.MostRecentPostAuthorID = this.MostRecentPostAuthorID;
thread.AuthorID = this.AuthorID;
thread.Status = this.Status;
thread.IsSticky = this.IsSticky;
thread.StickyDate = this.StickyDate;
thread.MostRecentPostID = this.MostRecentPostID;
return thread;
}
继承此类的子类一般是需要将对象 Copy 一份,然后另作它用。如:
public virtual String RenderedBody(PostTarget target)
{
Post p = this.Copy() as Post;
if (p.Section != null)
CSEvents.PreRenderPost(p,p.Section.ApplicationType,target);
else
CSEvents.PreRenderPost(p,ApplicationType.Unknown,target);
return p.FormattedBody;
}