0

我在 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();
        }
    }
}
4

1 回答 1

1

这两种情况都是早期绑定的示例,因为在编译时如何实例化对象是 100% 确定的。这里没有动态行为。当在编译时无法确定如何实例化对象时,就会发生后期绑定。一个典型的例子是反射。

于 2013-09-18T04:50:36.263 回答