【发布时间】:2026-02-02 00:15:01
【问题描述】:
给定
public class Animal
{
public Animal()
{
Console.WriteLine("Animal constructor called");
}
public virtual void Speak()
{
Console.WriteLine("animal speaks");
}
}
public class Dog: Animal
{
public Dog()
{
Console.WriteLine("Dog constructor called");
this.Speak();
}
public override void Speak()
{
Console.WriteLine("dog speaks");
base.Speak();
}
}
this.Speak() 呼叫Dog.Speak()。从狗中删除Speak(),然后突然this.Speak() 调用Animal.Speak()。为什么this 会这样?换句话说,为什么this 表示base 或this?
对我来说,明确调用base.Speak() 更有意义。特别是当 speak 不是虚拟的时,令人惊讶的是,当 virtual 被删除时,Speak() 仍然被调用。我从 OO 意义上理解 IS-A 关系,但我无法解决 C# 中的这个特定问题。当人们编写神级用户界面时(几乎每个企业都这样做),这变得特别烦人。当我应该查看“base”时,我正在“this”中寻找“Speak()”。
【问题讨论】:
-
在构造函数中调用虚方法是不行的。
-
当
class Doberman : Dog和Dog仍然不会超载Animal 的Speak时,base会发生什么行为? -
@leppie - 我想这是因为blogs.msdn.com/b/ericlippert/archive/2008/02/15/… ?
标签: c#