面向对象的编程中肯定会用到继承。有的情况下想把父类的值赋值给子类,你会怎么做呢?new一个父类的实例,再new一个子类的实例,然后逐个将属性赋值。本质上也确实这样赋值的,但是如果在程序用逐个去赋值就比较麻烦了,这个过程可以用一个归纳为一个方法来完成。如下:
父类:
代码下载: http://download.csdn.net/detail/yysyangyangyangshan/5540909
父类:
public class ParentClass
{
private string id = string.Empty;
private string name = string.Empty;
private int age = 0;
private string address = string.Empty;
/// <summary>
/// ID
/// </summary>
public string ID
{
get { return id; }
set { id = value; }
}
/// <summary>
/// 姓名
/// </summary>
public string Name
{
get { return name; }
set { name = value; }
}
/// <summary>
/// 年龄
/// </summary>
public int Age
{
get { return age; }
set { age = value; }
}
/// <summary>
/// 住址
/// </summary>
public string Address
{
get { return address; }
set { address = value; }
}
}
子类:
public class ChildClass:ParentClass
{
private decimal scored = 0;
private int? rank = null;
/// <summary>
/// 成绩
/// </summary>
public decimal Scored
{
get { return scored; }
set { scored = value; }
}
/// <summary>
/// 名次
/// </summary>
public int? Rank
{
get { return rank; }
set { rank = value; }
}
}
遍历父类的属性赋值给子类的方法:
private static ChildClass AutoCopy(ParentClass parent)
{
ChildClass child = new ChildClass();
var ParentType = typeof(ParentClass);
var Properties = ParentType.GetProperties();
foreach (var Propertie in Properties)
{
if (Propertie.CanRead && Propertie.CanWrite)
{
Propertie.SetValue(child, Propertie.GetValue(parent, null), null);
}
}
return child;
}
调用:
static void Main(string[] args)
{
ParentClass parent = new ParentClass();
parent.ID = "01";
parent.Name = "Sam";
parent.Age = 26;
parent.Address = "Beijing";
ChildClass child = AutoCopy(parent);
child.Scored = 90;
child.Rank = 1;
string result = string.Format("ID:{0} Name={1} Age={2} Address={3}", child.ID, child.Name, child.Age, child.Address);
string resultExtend = string.Format("Scored:{0} Rank={1}", child.Scored, child.Rank);
Console.WriteLine(result);
Console.WriteLine(resultExtend);
Console.ReadLine();
}
输出结果:
代码下载: http://download.csdn.net/detail/yysyangyangyangshan/5540909