Derived from a base class that implements an interface
<p>I get from <a href="http://rads.stackoverflow.com/amzn/click/0321245660" rel="nofollow">Effective C#</a> Item 23 that the following code should print: <code>MyDerivedMessage</code></p>

<pre><code>namespace ConsoleApplication1
{

    interface IMsg
    {
        void message();
    }

    public class MyMessage : IMsg
    {
        public void message()
        {
            Console.WriteLine("MyMessage");
        }
    }

    public class MyDerivedMessage : MyMessage
    {
        public new void message()
        {
            Console.WriteLine("MyDerivedMessage");
        }
    }

    class Test
    {

        static void Main()
        {
            MyDerivedMessage mdm = new MyDerivedMessage();
            IMsg im = mdm as IMsg;
            im.message();
        }
    }
}
</code></pre>

<p>Book:</p>

<pre><code>public class MyDerivedClass : MyClass
{
    public new void Message()
    {
        Console.WriteLine("MyDerivedClass");
    }
}
</code></pre>

<p>The addition of the IMsg keyword changes the behavior of your derived
    class so that IMsg.Message() now uses the derived class version:</p>

<pre><code>MyDerivedClass d = new MyDerivedClass();
d.Message(); // prints "MyDerivedClass".
IMsg m = d as IMsg;
m.Message(); // prints " MyDerivedClass "
</code></pre>

<p>How come I still get <code>MyMessage</code> printed after I add "new" to <code>MyDerivedMessage::message()</code> ?</p>
