//基于反射的拷贝构造函数,当属性动态添加时,不必修改复制构造函数。
public class bus
{
string numberPlate;
bool inService;
int seates;
public string NumberPlate
{
get { return numberPlate; }
set { numberPlate = value; }
}
public bool InService
{
get { return inService; }
set { inService = value; }
}
public int Seates
{
get { return seates; }
set { seates = value; }
}
//基于反射的拷贝构造函数
public bus(bus bus0)
{
PropertyInfo[] pInfos = bus0.GetType().GetProperties();
foreach (PropertyInfo pInfo in pInfos)
{
Type type = pInfo.PropertyType;
//调用InvokeMember提取当前属性值
object myvalue = bus0.GetType().InvokeMember(pInfo.Name, BindingFlags.GetProperty, null, bus0, null);
//将提取出来的属性值赋值到当前对象
bus0.GetType().InvokeMember(pInfo.Name, BindingFlags.SetProperty, null, this, new object[]{myvalue});
}
}
}