A מגדירה one/two/four (two קוראת this.one; four קורא this.two). B יורשת A ודורסת one/two, ומוסיפה three() שקוראת super.two()/base.Two(). C יורשת B ודורסת four בלבד, ללא בונה משלה. שישה קטעי קוד בודקים הבנה של static vs dynamic binding, הטלות (cast) חוקיות/לא-חוקיות, ושרשרת בנאים.
A מגדירה one/two/four (two קוראת this.one; four קורא this.two). B יורשת A ודורסת one/two, ומוסיפה three() שקוראת super.two()/base.Two(). C יורשת B ודורסת four בלבד, ללא בונה משלה. שישה קטעי קוד בודקים הבנה של static vs dynamic binding, הטלות (cast) חוקיות/לא-חוקיות, ושרשרת בנאים.
public class A
{
public A()
{
Console.WriteLine("A");
}
public virtual void One()
{
Console.WriteLine("One of A");
}
public virtual void Two()
{
Console.WriteLine("Two of A");
this.One();
}
public virtual void Four()
{
Console.WriteLine ("Four of A");
this.Two();
}
} //end of class A
public class B : A
{
public B()
{
Console.WriteLine("B");
}
public override void One()
{
Console.WriteLine("One of B");
}
public override void Two()
{
Console.WriteLine("Two of B");
}
public void Three()
{
Console.WriteLine("Three of B");
base.Two();
}
} //end of class B
public class C : B
{
public override void Four()
{
Console.WriteLine ("Four of C");
}
} //end of class C
public class Test
{
public static void Main(string [] args)
{
// כאן יופיעו הפקודות שבסעיפים להלן
}
}
סעיף א
A a1 = new A(); ((B) a1).two();
סעיף ב
B b1 = new B(); ((A) b1).three();
סעיף ג
A a2 = new A(); a2.one(); ((A) a2).two();
סעיף ד
A a3 = new B(); a3.two(); ((B) a3).two(); ((B) a3).three();
סעיף ה
B b2 = new B(); b2.two(); ((A) b2).two();
סעיף ו
B b3 = new C(); b3.four(); ((B)new C()).four();
שאלות ותגובות על השאלה
🎓 לא הבנתם משהו? קבלו הסבר נוסף ממרצה לתכנות
שאלו כאן — ותקבלו מענה מוסמך.