c# 父类与子类互转的两种方法
子类继承父类后,拓展了一些新属性,想在不同业务场景里使用,就必须经过转换,常见的转换方式有序列化,反射以及mapper
先介绍父类和子类:
/// <summary>
/// People类-父类
/// </summary>
public class People
{
/// <summary>
/// sex
/// </summary>
public string sex{ get; set; }
/// <summary>
/// 年龄
/// </summary>
public int age{ get; set; }
}
/// <summary>
/// Student-子类
/// </summary>
public class Student:People
{
/// <summary>
/// 学校
/// </summary>
public string school{ get; set; }
/// <summary>
/// 班级
/// </summary>
public int @class{ get; set; }
}
先介绍一个父类向子类单向转的方法,此方法只能把父类转子类,相反是不可以的:
People people = new Student();
Student student = (Student)people;
接下介绍互转的方法,先来实例化两个类:
People people=new People();
Student student =new Student ();
重点来了,先介绍第一种,用反射的方法,它是把实体内所有元素进行转换:
foreach (PropertyInfo item in typeof(People).GetProperties())
{
item.SetValue(student, item.GetValue(people));
}
第二种,用mapper,现有的mapper类有很多,我用的是emitmapper可以在nuget上搜到
ObjectsMapper<People, Student> mapper = ObjectMapperManager.DefaultInstance.GetMapper<People, Student>();
student=mapper.Map(people);