要跟踪 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
表仅存储一个 URLSlug
和一个引用的
表?RevisionID
>PageRevisions
最佳答案
为什么不让您的 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/