【发布时间】:2011-03-15 04:14:16
【问题描述】:
我了解什么是虚函数。但我不明白它们是如何在内部工作的?
class Animal
{
virtual string Eat()
{
return @"Eat undefined";
}
}
class Human : Animal
{
override string Eat()
{
return @"Eat like a Human";
}
}
class Dog : Animal
{
new string Eat()
{
return @"Eat like a Dog";
}
}
static void Main()
{
Animal _animal = new Human();
Console.WriteLine(_animal.Eat());
_animal = new Dog();
Console.WriteLine(_animal.Eat());
}
上述输出给出:
Eat like a Human
Eat undefined
在上面的代码中,_animal 是 Animal 类型,它引用了 Human 对象或 Dog 对象。 这是什么意思?我知道在内存中 _animal 包含一个指向 Human 或 Dog 对象的地址。它如何决定调用哪个函数。在第一种情况下,我覆盖并因此调用子级的实现,但在第二种情况下,我使用 new 并因此调用父级的实现。你能解释一下幕后发生了什么吗?
提前致谢 尼克
【问题讨论】:
-
你知道 Eric Lippert 正在写关于这个主题的博客系列吗?请参考blogs.msdn.com/b/ericlippert/archive/2011/03/17/…
-
感谢学习者。我正在关注它:)