如果我有两个这样的课程:
public class Animal
{
public virtual void speak()
{
//TOSPEAK
}
}
public class Dog : Animal
{
public override void speak()
{
//TODOGSPEAK
}
}
如果我将这两个类中的任何一个的对象传递给一个与其具有相似形式的方法
void method (Animal ob1);
如果我调用了speak方法,如果我传递了每个对象,那么会调用哪个方法?有没有办法知道哪个对象类型已传递给方法?
答案 0 :(得分:5)
如果我调用了speak方法,如果我传递了每个对象,那么将调用一个方法
如果您传入method
的对象只是Animal
,则会调用Animal.speak()
。如果是狗,则会调用Dog.speak()
。这就是polymorphism的重点。
是否有办法知道哪个对象类型已传递给方法
if(ob1 is Dog)
{
}
注意:正如大家已经提到的,如果你需要检查对象的类型,那不是一个好主意,你应该重新考虑你的设计。如果要为不同类型执行不同的操作,那么就是覆盖方法的重点。如果这不是问题,您可以为每种类型创建重载方法,而不是在一种方法中检查类型并实现相同的目的。