C# delegates and lambdas... not pointing to the expected method
<p>I'm reading the blog about Y combinators and there's a mention of a snippet of code posted below:</p>

<p><a href="http://blogs.msdn.com/b/wesdyer/archive/2007/02/02/anonymous-recursion-in-c.aspx" rel="nofollow">http://blogs.msdn.com/b/wesdyer/archive/2007/02/02/anonymous-recursion-in-c.aspx</a> </p>

<pre><code>Func&lt;int, int&gt; fib = null;
fib = n =&gt; n &gt; 1 ? fib(n - 1) + fib(n - 2) : n;
Func&lt;int, int&gt; fibCopy = fib;
Console.WriteLine(fib(6));                        // displays 8
Console.WriteLine(fibCopy(6));                    // displays 8
fib = n =&gt; n * 2;
Console.WriteLine(fib(6));                        // displays 12
Console.WriteLine(fibCopy(6));                    // displays 18
</code></pre>

<blockquote>
  <p>Huh!?  Notice how the result of calling fib changes and that the
  result of calling fibCopy differs even from the result of calling fib!
  (See if you can figure out why)</p>
</blockquote>

<p>The poster mentions that this result will occur however, he doesn't mention why and I can't to see to figure it out either. The way I see it is...</p>

<pre><code>fib -&gt; Points to fib sequence lambda
fibCopy -&gt; Points to fib sequence lambda
lambda -&gt; n * 2
fib -&gt; points to new lambda
fibCopy -&gt; points to fib which is pointing to new lambda.... 
</code></pre>

<p>but obviously that's not what's going on.</p>