以下のように、Main() に Manager クラスの 2 つのオブジェクトを作成しました。
Manager mgr = new Manager();
Employee emp= new Manager();
私が理論的に理解しているのは、最初のオブジェクトの作成 [mgr] はコンパイル時のバインディングであるのに対し、2 番目のオブジェクトの作成 [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();
}
}
}