【发布时间】:2014-12-29 06:43:07
【问题描述】:
如果我有两个这样的课程:
public class Animal
{
public virtual void speak()
{
//TOSPEAK
}
}
public class Dog : Animal
{
public override void speak()
{
//TODOGSPEAK
}
}
如果我将这两个类中的任何一个的对象传递给具有类似形式的方法
void method (Animal ob1);
如果我调用 speak 方法,如果我传递每个对象,会调用哪个方法?有没有办法知道哪个对象类型已传递给该方法?
【问题讨论】:
-
@downvoter:虽然拒绝投票是匿名的,但这里的解释肯定会有很长的路要走。你的推理对我来说似乎并不明显。如果它是重复的,请投票关闭或标记。
-
值得注意的是,测试对象的类型通常表明某处存在设计缺陷;虚方法和多态性的全部意义在于你不必确切地知道你正在处理的对象的类型,只是它实现了一些特定的接口(我在一般意义上,而不是 C# 特性——具有虚方法的基类定义了一个接口)。
-
不是反对者,但是:作为可维护性问题:您应该避免想知道这个问题的答案:-)。如果你需要对象的类型,你的抽象(这里的 API)是泄漏的。毕竟,显然能够“说话”并不足以与那只动物一起工作。
标签: c# object inheritance casting