我在 Main() 中创建了两个 Manager 类对象,如下所示:
Manager mgr = new Manager();
Employee emp= new Manager();
我从理论上理解的是,第一个对象创建 [mgr] 是编译时绑定,而第二个对象创建 [emp] 是运行时绑定。但我想了解它实际上发生了什么决定函数调用将在编译时 [在我的情况下,mgr] 或运行时 [在我的情况下,emp] 绑定到函数名称。
我在这里的理解是,在这两种情况下,对象都只能在运行时创建。如果我说 new Manager() 那么它必须只创建 Manager 的对象。因此,请建议在运行时实际发生的情况,而不是编译时的情况。
namespace EarlyNLateBinding
{
class Employee
{
public virtual double CalculateSalary(double basic, double hra, double da)
{
return basic + hra + da;
}
}
class Manager:Employee
{
double allowances = 4000;
public override double CalculateSalary(double basic, double hra, double da)
{
return basic + hra + da+allowances;
}
}
class Program
{
static void Main(string[] args)
{
Employee emp= new Manager();
double empsalary = emp.CalculateSalary(35000, 27000, 5000);
Console.WriteLine(empsalary.ToString());
Manager mgr = new Manager();
double mgrsalary = mgr.CalculateSalary(35000, 27000, 5000);
Console.WriteLine(mgrsalary.ToString());
Console.Read();
}
}
}