继承:根据具体对象在运行时调用正确的方法

时间:2012-10-05 08:33:30

标签: c# inheritance

我有以下课程:

public class Person
{
}

public class Employee : Person
{
}

public class Customer : Person
{
}

使用这些类的一些方法:

public class OtherClass
{
    public void DoSomething(Employee e)
    {
    }

    public void DoSomething(Customer c)
    {
    }
}

电话:

// People = Collection<Person>.
foreach (var p in People)
    DoSomething(p); // Should call the right method at runtime and "see" if it´s an Employee or a Customer.

编译器不允许这样做。我该如何实现这种情况?

1 个答案:

答案 0 :(得分:4)

这里最简单的方法是多态,即

public class Person
{
    public virtual void DoSomething() {} // perhaps abstract?
}

public class Employee : Person
{
    public override void DoSomething() {...}
}

public class Customer : Person
{
    public override void DoSomething() {...}
}

并使用:

foreach (var p in People)
    p.DoSomething();

无论其!如果那是不可能的,那就作弊:

foreach (var p in People)
    DoSomething((dynamic)p); // TADA!

另一个选择是自己检查类型:

public void DoSomething(Person p)
{
    Employee e = p as Employee;
    if(e != null) DoSomething(e);
    else {
        Customer c = p as Customer;
        if(c != null) DoSomething(c);
    }
}