面向对象的编程中肯定会用到继承。有的情况下想把父类的值赋值给子类,你会怎么做呢?new一个父类的实例,再new一个子类的实例,然后逐个将属性赋值。本质上也确实这样赋值的,但是如果在程序用逐个去赋值就比较麻烦了,这个过程可以用一个归纳为一个方法来完成。如下:
父类:
代码下载: http://download.youkuaiyun.com/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.youkuaiyun.com/detail/yysyangyangyangshan/5540909
转载于:https://blog.51cto.com/yangyoushan/1276406