Why does this sometimes mean base?
<p>Given</p>

<pre><code>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();
    }
}
</code></pre>

<p><code>this.Speak()</code> calls <code>Dog.Speak()</code>.  Remove <code>Speak()</code> from dog and suddenly <code>this.Speak()</code> calls <code>Animal.Speak()</code>.  Why does <code>this</code> behave this way?  In other words, why does <code>this</code> mean <code>base</code> or <code>this</code>?  </p>

<p>To me, an explicit call to <code>base.Speak()</code> makes more sense.  Especially when speak is not virtual, surprisingly Speak() is still called when <code>virtual</code> is removed.  I understand IS-A relationships from an OO sense, but I can't wrap my head around this specific problem in C#.  This gets especially annoying when people write God class UI's (practically every business does).  I'm looking for "Speak()" inside "this" when I should be looking at "base".</p>
