2011-08-24 74 views
2

创建子类的实例我有一个基类:自动从它的基类的实例

class MyBase 
{ 
    public int Id { get; set; } 
    public string CreatedBy { get; set; } 
    public DateTime CreateAt { get; set; } 
} 

没有与只读属性的子类从基类继承:

class MySub : MyBase 
{ 
    public string CreateAtStr{ 
     get { return CreateAt.ToString("yyyy-MMM-dd", CultureInfo.InvariantCulture); } 
    } 
} 

我只能得到的结果MyBase类型,我希望它们被自动转换为MySub类型。 如何做到这一点? BTW:基类是实体类,子类是用于视图的,所以它需要一些定制。

+0

的复制[此](http://stackoverflow.com/questions/124336/a-way-of-casting-a-base-type-to-a派生型)? – Sumo

+1

你应该真正修改你的问题,以达到一点。在目前的形式下,很难理解你想要达到的目标。 –

回答

4

您无法将基类转换为派生类,OOP不包括这种情况(仅仅因为基类实例不是派生类实例)。

另一方面,您可以创建MySub的新实例,然后使用像AutoMapper这样的映射工具(或手动执行)来复制所有基本属性的值。

即手动复制:

List<MyBase> items = ... 
List<MySub> subs = items.Select(x=> new MySub() 
         { 
          Id = x.Id, 
          CreatedBy = x.CreatedBy, 
          CreatedAt = x.CreatedAt 
         }) 
         .ToList(); 

编辑:

在特定情况下(仅使用现有的基类的公共属性),如果你不介意使用替代的方法属性替代可能是一个扩展方法:

public static class FooExtensions 
{ 
    public static string CreateAtStr(this MyBase myBase) 
    { 
     return myBase.CreateAt.ToString("yyyy-MMM-dd", CultureInfo.InvariantCulture); 
    } 
} 

现在你不需要一个派生类都可以,但简单地调用CreateAtStr()MyBase类型的实例:

MyBase myBase = new MyBase(); 
string createdAt = myBase.CreateAtStr();