将派生类型转换为基类型 - 不使用基本方法实现

时间:2015-12-16 20:41:50

标签: c# casting

有人可以解释为什么当我将派生类型转换为基类型时,不使用虚方法的基类型实现。

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

1 个答案:

答案 0 :(得分:0)

这样看:你有一份雇员名单(即基本类型)。您可以将基本类型或派生类型的对象(例如管理器)添加到此列表中。现在,您想要遍历此列表:

foreach (Employee emp in list)
{
    emp.Introduce();
}

循环变量将列表中的所有对象强制转换为Employee。这里,强制转换不会改变对象的类型。它只会改变你看待它们的方式。即如果管理者有其他属性和方法,你就不会通过emp看到它们,但管理者仍然表现得像经理人。这正是您的期望:您希望经理将自己介绍为经理和员工,以便将自己介绍为员工。

此行为称为Polymorphism (C# Programming Guide)