你创建了一个类
public enum SexType
{
Boy,Girl
}
public class StudentInfo
{
public string Name;
public int Age;
public SexType Sex;
}
然后你用这个方法来显示它的属性:
public virtual void ShowInfo(StudentInfo si)
{
Console.WriteLine("Name:\t"+si.Name);
Console.WriteLine("Age:\t"+si.Age);
Console.WriteLine("Sex:\t"+si.Sex);
}
但是,如果有人扩充了你的类:
public StudentInfoEx:StudentInfo
{
public string FatherName;
public string MotherName;
}
那么在上面的ShowInfo不变的情况下,怎样显示扩充了的内容呢?
当然,可以这样:
public override void ShowInfo(StudentInfo si)
{
base.ShowInfo(si);
if(si is StudentInfoEx)
{
StudentInfoEx siex=(StudentInfoEx)si;
Console.WriteLine(siex.FatherName);
Console.WriteLine(siex.MotherName);
}
}
当然,如果你懒点,在原方法定义时就用Reflection:
public virtual void ShowInfo(StudentInfo si)
{
Type t=si.GetType();
foreach(FieldInfo fi in t.GetFields(BindingFlags.Instance|BindingFlags.Public))
{
Console.WriteLine(fi.Name+":\t"+fi.GetValue(si));
}
}