我在Main()中创建了两个Manager类对象,如下所示:
Manager mgr = new Manager();
Employee emp= new Manager();
我理论上理解的是,第一个对象创建[mgr]是编译时绑定,而第二个对象创建[emp]是运行时绑定。但是我想了解实际上实际发生的事情,决定函数调用将在编译时绑定到函数名[在我的情况下,mgr]或运行时间[在我的情况下,emp]。
我在这里理解的是,在这两种情况下,对象只能在运行时创建。如果我说新的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();
}
}
}
答案 0 :(得分:1)
这两种情况都是早期绑定的例子,因为它在编译时是100%确定性的,如何实例化对象。这里没有动态行为。当在编译时无法确定如何实例化对象时,会发生延迟绑定。一个典型的例子就是反思。