自动从基类实例创建子类实例

本文关键字:实例 创建 子类 基类 | 更新日期: 2023-09-27 18:06:25

有一个基类:

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:基类是实体类和子类是为视图,所以它需要一些定制

自动从基类实例创建子类实例

您不能将基类转换为派生类,OOP不涵盖这种情况(仅仅是因为基类实例不是派生类实例)。

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

。E手工复制:

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); 
    }
}

现在您根本不需要派生类,只需在MyBase类型的实例上调用CreateAtStr():

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