考虑以下方法:
public PrintObjectHierarchy(object o)
{
Console.WriteLine(o.GetType.FullName);
object baseObject = PruneObjectToItsBaseObject(o);
if(!baseObject.GetType().Equals(typeof(object)))
PrintObjectHierarchy(baseObject);
else Console.WriteLine("System.Object");
}
例如,如果我写:
class Form1 : Form
{
static void Main()
{
Form1 f1 = new Form1();
PrintObjectHierarchy(f1);
}
}
然后它应该为我打印:
MyNamespace.Form1
System.Windows.Form
System.Windows.Forms.ContainerControl
/*and so so till...*/
System.Object
但不幸的是,即使我将对象转换为它的 BaseType,“C# 多态性”也只会将其VIEW限制为基本类型,并且不会从REAL基本对象返回REAL引用给我!让我们通过一个例子来描述它;如果我有
class Person {
public string Name;
public string LastName;
}
class President : Person {
public string password;
}
main(){
President pr = new President() {Name="John"; LastName="Smith"; password="js123" };
Person p = (Person)pr;
SendToAirportSystemAcrossInternet(p);
}
虽然我们认为p是一个人,但它不是!它是总统,p只是它的一个视图,所以总统的密码会在互联网上传播!
关于如何将对象修剪或切片以创建真正的基础对象的任何想法?
提前致谢!