次の方法を検討してください。
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 に CAST したとしても、「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はそこからの眺めにすぎないため、大統領のパスワードはインターネット上を移動します。
オブジェクトをプルーニングまたはスライスして、実際のベース オブジェクトを作成する方法についてのアイデアはありますか?
前もって感謝します!