第四部分 方法3---------------

本文通过C#示例代码展示了如何使用virtual和override关键字来实现多态性,从而让基类引用能够调用派生类的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

   对Employee.CalculatePay方法的调用是问题的原因。我们需要的是晚绑定。晚绑定(Latebinging)意味着编译器到运行时才选择要执行的方法。为了迫使编译器调用向上类型转换得到的对象的方法的正确版本。我们使用了两个关键字:virtual 和override.必须在基类方法中使用virtual 关键字,在方法的派生类实现中使用override 关键字。下面是实现多态的晚绑定的多台性:
class Employee
 {
       public string name;
       public Employee(string name)
              {
                 this.name=name;
              }
       public virtual void CalculatePay()
           {
                Console.WriteLine("Employee.CalculatePay called for {0}",name);
           }
  }
class ContractEmployee:Employee
         {
             public ContractEmployee(string name):base(name)
              {}
             public override void CalculatePay()
               {
                 Console.WriteLine("ContractEmployee.CalculatePay called for {0}",name);
               }
         }
class SalariedEmployee:Employee
    {
         public SalariedEmployee(string name):base(name)
          {}
         public override void CalculatePay()
          {
                Console.WriteLine("SalariedEmployee.CalculatePay called for {0}",name);
          }
    }
class TestPolymorphic
    {
        protected Employee[] employees;
        public void LoadEmployees()
          {
            //Simulating loading from a database.
              employees=new Employee[2];
              employees[0]=new ContractEmployee("Adam Barr");
              employees[1]=new SalariedEmployee("Max Benson");
          }
     }
       public void DoPayroll()
         {
             for(int i=0;i<employees.GetLength(0);i++)
               {
                 employees[i].CalculatePay();
               }
         }
     static void Main(string[] args)
         {
              TestPolymorphic t=new TestPolymorphic();
              t.LoadEmployees();
              t.DoPayroll();
          }
      }
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值