Mega Code Archive

 
Categories / C# / Class Interface
 

Virtual keyword can be used to start a new inheritance ladder

using System; public class Class1 {     public static void Main(string[] strings) {         BankAccount ba = new BankAccount();         Test1(ba);         SavingsAccount sa = new SavingsAccount();         Test1(sa);         Test2(sa);         SpecialSaleAccount ssa = new SpecialSaleAccount();         Test1(ssa);         Test2(ssa);         Test3(ssa);         SaleSpecialCustomer ssc = new SaleSpecialCustomer();         Test1(ssc);         Test2(ssc);         Test3(ssc);         Test4(ssc);     }     public static void Test1(BankAccount account) {         Console.Write("to Test(BankAccount)");         account.Withdrawal(100);     }     public static void Test2(SavingsAccount account) {         Console.Write("to Test(SavingsAccount)");         account.Withdrawal(100);     }     public static void Test3(SpecialSaleAccount account) {         Console.Write("to Test(SpecialSaleAccount)");         account.Withdrawal(100);     }     public static void Test4(SaleSpecialCustomer account) {         Console.Write("to Test(SaleSpecialCustomer)");         account.Withdrawal(100);     } } public class BankAccount {     virtual public void Withdrawal(double dWithdrawal) {         Console.WriteLine(" invokes BankAccount.Withdrawal()");     } } public class SavingsAccount : BankAccount {     override public void Withdrawal(double dWithdrawal) {         Console.WriteLine(" invokes SavingsAccount.Withdrawal()");     } } public class SpecialSaleAccount : SavingsAccount {     new virtual public void Withdrawal(double dWithdrawal) {         Console.WriteLine(" invokes SpecialSaleAccount.Withdrawal()");     } } public class SaleSpecialCustomer : SpecialSaleAccount {     override public void Withdrawal(double dWithdrawal) {         Console.WriteLine           (" invokes SaleSpecialCustomer.Withdrawal()");     } }