为了跟踪Page
类的修订,我有一个PageRevision
类,该类继承自Page
并添加了修订ID(Guid RevisionID;
)。
如果可能,如何将现有的Page
对象强制转换为PageRevision
并确保调用PageRevision构造函数以创建新的修订ID?
我可以有一个PageRevision(Page page)
构造函数来生成Guid并复制所有Page属性,但是我想使其自动化,特别是如果Page
类具有许多属性(后来我又添加了一个,却忘记修改副本)构造函数)。
预期用途
Page page = new Page(123, "Page Title", "Page Body"); // where 123 is page ID
PageRevision revision = (PageRevision)page;
// now revision.RevisionID should be a new Guid.
Page
,PageRevision
类:public class Page
{
public int ID { get; set; }
public string Title { get; set; }
public string Body { get; set; }
}
public class PageRevision : Page
{
public Guid RevisionID { get; set; }
public PageRevision()
{
this.RevisionID = Guid.NewGuid();
}
}
根据反馈进行编辑:
除了现在很明显的
(Horse)Animal;
转换问题外,Jon Skeet还建议进行复合修订:public class PageRevision : Page
{
private readonly Page page;
private readonly Guid id;
public Guid RevisionID { get { return id; } }
public Page Page { get { return page; } }
public PageRevision(Page page)
{
this.id = Guid.NewGuid();
this.page = page;
}
}
但是,这与我的数据模型有很大不同,我想使两者尽可能相似。在我的数据库中,
PageRevisions
表的列与Pages
表的列相同,期望有额外的RevisionID
列。这很容易通过数据库触发器进行版本控制。根据这种复合方法,使用
PageRevisions
存储所有页面数据(RevisionID
,Title
和Body
)更有意义,而Pages
表仅存储URL 和引用Slug
表的RevisionID
? 最佳答案
为什么不让您的PageRevision类组成而不是继承呢?
public class PageRevision : Page
{
private readonly Page page;
private readonly Guid id;
public Guid RevisionID { get { return id; } }
public Page Page { get { return page; } }
public PageRevision(Page page)
{
this.id = Guid.NewGuid();
this.page = page;
}
}
关于c# - 通过强制转换(ChildClass)parentObject来调用子构造函数;跟踪修订,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2698041/