有人可以解释为什么当我将派生类型转换为基类型时,不使用虚方法的基类型实现。
public class Employee
{
public virtual void Introduce()
{
Console.WriteLine("Hello, i'm an employee");
}
}
public class Manager : Employee
{
public override void Introduce()
{
Console.WriteLine("Hello, i'm a manager");
}
}
void Main()
{
Manager manager = new Manager();
Employee employee = (Employee)manager;
employee.Introduce();
}
// output is: Hello, i'm a manager
答案 0 :(得分:0)
这样看:你有一份雇员名单(即基本类型)。您可以将基本类型或派生类型的对象(例如管理器)添加到此列表中。现在,您想要遍历此列表:
foreach (Employee emp in list)
{
emp.Introduce();
}
循环变量将列表中的所有对象强制转换为Employee
。这里,强制转换不会改变对象的类型。它只会改变你看待它们的方式。即如果管理者有其他属性和方法,你就不会通过emp
看到它们,但管理者仍然表现得像经理人。这正是您的期望:您希望经理将自己介绍为经理和员工,以便将自己介绍为员工。