自动从基类实例创建子类实例
本文关键字:实例 创建 子类 基类 | 更新日期: 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();