<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:copyright="http://blogs.law.harvard.edu/tech/rss" xmlns:image="http://purl.org/rss/1.0/modules/image/">
    <channel>
        <title>Oxygene</title>
        <link>http://blog.colinmackay.net/category/20.aspx</link>
        <description>Posts about Oxygene - the language formerly known as Chrome</description>
        <language>en-GB</language>
        <copyright>Colin Angus Mackay</copyright>
        <managingEditor>colin.mackay@gmail.com</managingEditor>
        <generator>Subtext Version 1.9.0.27</generator>
        <item>
            <title>Mixins in .NET (again)</title>
            <link>http://blog.colinmackay.net/archive/2008/08/10/3302.aspx</link>
            <description>&lt;p&gt;A while ago I wrote about &lt;a href="http://blog.colinmackay.net/archive/2008/02/24/1895.aspx" target="_blank"&gt;Mixins in C# 3.0&lt;/a&gt;, at the time I was saying that you can get some of the functionality, but not all, from some of the new language features in C#3.0. The solution is a bit of a fudge because the language doesn't support the concept. I've been looking at &lt;a href="http://www.remobjects.com/product/page.asp?id={E10F7F5C-AE94-4833-9E4B-2EDD5ED69768}" target="_blank"&gt;Oxygene&lt;/a&gt; recently and it has some language features that go a bit further than C# does and will support greater mixin-like functionality which it calls interface delegation. &lt;/p&gt;  &lt;p&gt;Interface delegation is again a bit of a fudge, but not quite like C#. In this case the language supports this mixin-like functionality and the fudge happens in the compiler. Let's take the class hierarchy that I used the last time:&lt;/p&gt;  &lt;p align="center"&gt;&lt;a title="Class-Diagram-2 by Colin  Angus Mackay, on Flickr" href="http://www.flickr.com/photos/colinangusmackay/2287423942/"&gt;&lt;img height="405" alt="Class-Diagram-2" src="http://farm3.static.flickr.com/2112/2287423942_1be2458fac_o.png" width="658" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;In Oxygene the Dog class looks like this:&lt;/p&gt;  &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;interface&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;/span&gt;t&lt;span class="kwrd"&gt;&lt;/span&gt;y&lt;span class="kwrd"&gt;&lt;/span&gt;p&lt;span class="kwrd"&gt;&lt;/span&gt;e&lt;span class="kwrd"&gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt;D&lt;span class="kwrd"&gt;&lt;/span&gt;o&lt;span class="kwrd"&gt;&lt;/span&gt;g&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt;=&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;public&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;/span&gt;(&lt;span class="kwrd"&gt;&lt;/span&gt;M&lt;span class="kwrd"&gt;&lt;/span&gt;a&lt;span class="kwrd"&gt;&lt;/span&gt;m&lt;span class="kwrd"&gt;&lt;/span&gt;m&lt;span class="kwrd"&gt;&lt;/span&gt;a&lt;span class="kwrd"&gt;&lt;/span&gt;l&lt;span class="kwrd"&gt;&lt;/span&gt;,&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt;I&lt;span class="kwrd"&gt;&lt;/span&gt;R&lt;span class="kwrd"&gt;&lt;/span&gt;u&lt;span class="kwrd"&gt;&lt;/span&gt;n&lt;span class="kwrd"&gt;&lt;/span&gt;,&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt;I&lt;span class="kwrd"&gt;&lt;/span&gt;S&lt;span class="kwrd"&gt;&lt;/span&gt;w&lt;span class="kwrd"&gt;&lt;/span&gt;i&lt;span class="kwrd"&gt;&lt;/span&gt;m&lt;span class="kwrd"&gt;&lt;/span&gt;)&lt;span class="kwrd"&gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;private&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt;r&lt;span class="kwrd"&gt;&lt;/span&gt;u&lt;span class="kwrd"&gt;&lt;/span&gt;n&lt;span class="kwrd"&gt;&lt;/span&gt;I&lt;span class="kwrd"&gt;&lt;/span&gt;n&lt;span class="kwrd"&gt;&lt;/span&gt;t&lt;span class="kwrd"&gt;&lt;/span&gt;e&lt;span class="kwrd"&gt;&lt;/span&gt;r&lt;span class="kwrd"&gt;&lt;/span&gt;f&lt;span class="kwrd"&gt;&lt;/span&gt;a&lt;span class="kwrd"&gt;&lt;/span&gt;c&lt;span class="kwrd"&gt;&lt;/span&gt;e&lt;span class="kwrd"&gt;&lt;/span&gt;D&lt;span class="kwrd"&gt;&lt;/span&gt;e&lt;span class="kwrd"&gt;&lt;/span&gt;l&lt;span class="kwrd"&gt;&lt;/span&gt;e&lt;span class="kwrd"&gt;&lt;/span&gt;g&lt;span class="kwrd"&gt;&lt;/span&gt;a&lt;span class="kwrd"&gt;&lt;/span&gt;t&lt;span class="kwrd"&gt;&lt;/span&gt;e&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt;:&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt;R&lt;span class="kwrd"&gt;&lt;/span&gt;u&lt;span class="kwrd"&gt;&lt;/span&gt;n&lt;span class="kwrd"&gt;&lt;/span&gt;M&lt;span class="kwrd"&gt;&lt;/span&gt;i&lt;span class="kwrd"&gt;&lt;/span&gt;x&lt;span class="kwrd"&gt;&lt;/span&gt;i&lt;span class="kwrd"&gt;&lt;/span&gt;n&lt;span class="kwrd"&gt;&lt;/span&gt;;&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt;i&lt;span class="kwrd"&gt;&lt;/span&gt;m&lt;span class="kwrd"&gt;&lt;/span&gt;p&lt;span class="kwrd"&gt;&lt;/span&gt;l&lt;span class="kwrd"&gt;&lt;/span&gt;e&lt;span class="kwrd"&gt;&lt;/span&gt;m&lt;span class="kwrd"&gt;&lt;/span&gt;e&lt;span class="kwrd"&gt;&lt;/span&gt;n&lt;span class="kwrd"&gt;&lt;/span&gt;t&lt;span class="kwrd"&gt;&lt;/span&gt;s&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt;I&lt;span class="kwrd"&gt;&lt;/span&gt;R&lt;span class="kwrd"&gt;&lt;/span&gt;u&lt;span class="kwrd"&gt;&lt;/span&gt;n&lt;span class="kwrd"&gt;&lt;/span&gt;;&lt;span class="kwrd"&gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt;s&lt;span class="kwrd"&gt;&lt;/span&gt;w&lt;span class="kwrd"&gt;&lt;/span&gt;i&lt;span class="kwrd"&gt;&lt;/span&gt;m&lt;span class="kwrd"&gt;&lt;/span&gt;I&lt;span class="kwrd"&gt;&lt;/span&gt;n&lt;span class="kwrd"&gt;&lt;/span&gt;t&lt;span class="kwrd"&gt;&lt;/span&gt;e&lt;span class="kwrd"&gt;&lt;/span&gt;r&lt;span class="kwrd"&gt;&lt;/span&gt;f&lt;span class="kwrd"&gt;&lt;/span&gt;a&lt;span class="kwrd"&gt;&lt;/span&gt;c&lt;span class="kwrd"&gt;&lt;/span&gt;e&lt;span class="kwrd"&gt;&lt;/span&gt;D&lt;span class="kwrd"&gt;&lt;/span&gt;e&lt;span class="kwrd"&gt;&lt;/span&gt;l&lt;span class="kwrd"&gt;&lt;/span&gt;e&lt;span class="kwrd"&gt;&lt;/span&gt;g&lt;span class="kwrd"&gt;&lt;/span&gt;a&lt;span class="kwrd"&gt;&lt;/span&gt;t&lt;span class="kwrd"&gt;&lt;/span&gt;e&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt;:&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt;S&lt;span class="kwrd"&gt;&lt;/span&gt;w&lt;span class="kwrd"&gt;&lt;/span&gt;i&lt;span class="kwrd"&gt;&lt;/span&gt;m&lt;span class="kwrd"&gt;&lt;/span&gt;M&lt;span class="kwrd"&gt;&lt;/span&gt;i&lt;span class="kwrd"&gt;&lt;/span&gt;x&lt;span class="kwrd"&gt;&lt;/span&gt;i&lt;span class="kwrd"&gt;&lt;/span&gt;n&lt;span class="kwrd"&gt;&lt;/span&gt;;&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt;i&lt;span class="kwrd"&gt;&lt;/span&gt;m&lt;span class="kwrd"&gt;&lt;/span&gt;p&lt;span class="kwrd"&gt;&lt;/span&gt;l&lt;span class="kwrd"&gt;&lt;/span&gt;e&lt;span class="kwrd"&gt;&lt;/span&gt;m&lt;span class="kwrd"&gt;&lt;/span&gt;e&lt;span class="kwrd"&gt;&lt;/span&gt;n&lt;span class="kwrd"&gt;&lt;/span&gt;t&lt;span class="kwrd"&gt;&lt;/span&gt;s&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt;I&lt;span class="kwrd"&gt;&lt;/span&gt;S&lt;span class="kwrd"&gt;&lt;/span&gt;w&lt;span class="kwrd"&gt;&lt;/span&gt;i&lt;span class="kwrd"&gt;&lt;/span&gt;m&lt;span class="kwrd"&gt;&lt;/span&gt;;&lt;span class="kwrd"&gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;protected&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;public&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt;e&lt;span class="kwrd"&gt;&lt;/span&gt;n&lt;span class="kwrd"&gt;&lt;/span&gt;d&lt;span class="kwrd"&gt;&lt;/span&gt;;&lt;span class="kwrd"&gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;/span&gt;i&lt;span class="kwrd"&gt;&lt;/span&gt;m&lt;span class="kwrd"&gt;&lt;/span&gt;p&lt;span class="kwrd"&gt;&lt;/span&gt;l&lt;span class="kwrd"&gt;&lt;/span&gt;e&lt;span class="kwrd"&gt;&lt;/span&gt;m&lt;span class="kwrd"&gt;&lt;/span&gt;e&lt;span class="kwrd"&gt;&lt;/span&gt;n&lt;span class="kwrd"&gt;&lt;/span&gt;t&lt;span class="kwrd"&gt;&lt;/span&gt;a&lt;span class="kwrd"&gt;&lt;/span&gt;t&lt;span class="kwrd"&gt;&lt;/span&gt;i&lt;span class="kwrd"&gt;&lt;/span&gt;o&lt;span class="kwrd"&gt;&lt;/span&gt;n&lt;span class="kwrd"&gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;/span&gt;e&lt;span class="kwrd"&gt;&lt;/span&gt;n&lt;span class="kwrd"&gt;&lt;/span&gt;d&lt;span class="kwrd"&gt;&lt;/span&gt;.&lt;span class="kwrd"&gt;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;From this we can see that &lt;strong&gt;Dog&lt;/strong&gt; inherits from &lt;strong&gt;Mammal&lt;/strong&gt; and implements &lt;strong&gt;IRun&lt;/strong&gt; and &lt;strong&gt;ISwim&lt;/strong&gt;. The &lt;strong&gt;IRun&lt;/strong&gt; interface has one method (&lt;strong&gt;Run&lt;/strong&gt;), and the &lt;strong&gt;ISwim&lt;/strong&gt; interface has only one method also (&lt;strong&gt;Swim&lt;/strong&gt;). Of course, there could be as many methods and properties as you like.&lt;/p&gt;

&lt;p&gt;The C# version of the Dog class, as produced by Reflector, looks like this:&lt;/p&gt;

&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt;D&lt;span class="kwrd"&gt;&lt;/span&gt;o&lt;span class="kwrd"&gt;&lt;/span&gt;g&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt;:&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt;M&lt;span class="kwrd"&gt;&lt;/span&gt;a&lt;span class="kwrd"&gt;&lt;/span&gt;m&lt;span class="kwrd"&gt;&lt;/span&gt;m&lt;span class="kwrd"&gt;&lt;/span&gt;a&lt;span class="kwrd"&gt;&lt;/span&gt;l&lt;span class="kwrd"&gt;&lt;/span&gt;,&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt;I&lt;span class="kwrd"&gt;&lt;/span&gt;R&lt;span class="kwrd"&gt;&lt;/span&gt;u&lt;span class="kwrd"&gt;&lt;/span&gt;n&lt;span class="kwrd"&gt;&lt;/span&gt;,&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt;I&lt;span class="kwrd"&gt;&lt;/span&gt;S&lt;span class="kwrd"&gt;&lt;/span&gt;w&lt;span class="kwrd"&gt;&lt;/span&gt;i&lt;span class="kwrd"&gt;&lt;/span&gt;m&lt;span class="kwrd"&gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;/span&gt;{&lt;span class="kwrd"&gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="rem"&gt;// Fields&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;private&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt;R&lt;span class="kwrd"&gt;&lt;/span&gt;u&lt;span class="kwrd"&gt;&lt;/span&gt;n&lt;span class="kwrd"&gt;&lt;/span&gt;M&lt;span class="kwrd"&gt;&lt;/span&gt;i&lt;span class="kwrd"&gt;&lt;/span&gt;x&lt;span class="kwrd"&gt;&lt;/span&gt;i&lt;span class="kwrd"&gt;&lt;/span&gt;n&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt;r&lt;span class="kwrd"&gt;&lt;/span&gt;u&lt;span class="kwrd"&gt;&lt;/span&gt;n&lt;span class="kwrd"&gt;&lt;/span&gt;I&lt;span class="kwrd"&gt;&lt;/span&gt;n&lt;span class="kwrd"&gt;&lt;/span&gt;t&lt;span class="kwrd"&gt;&lt;/span&gt;e&lt;span class="kwrd"&gt;&lt;/span&gt;r&lt;span class="kwrd"&gt;&lt;/span&gt;f&lt;span class="kwrd"&gt;&lt;/span&gt;a&lt;span class="kwrd"&gt;&lt;/span&gt;c&lt;span class="kwrd"&gt;&lt;/span&gt;e&lt;span class="kwrd"&gt;&lt;/span&gt;D&lt;span class="kwrd"&gt;&lt;/span&gt;e&lt;span class="kwrd"&gt;&lt;/span&gt;l&lt;span class="kwrd"&gt;&lt;/span&gt;e&lt;span class="kwrd"&gt;&lt;/span&gt;g&lt;span class="kwrd"&gt;&lt;/span&gt;a&lt;span class="kwrd"&gt;&lt;/span&gt;t&lt;span class="kwrd"&gt;&lt;/span&gt;e&lt;span class="kwrd"&gt;&lt;/span&gt;;&lt;span class="kwrd"&gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;private&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt;S&lt;span class="kwrd"&gt;&lt;/span&gt;w&lt;span class="kwrd"&gt;&lt;/span&gt;i&lt;span class="kwrd"&gt;&lt;/span&gt;m&lt;span class="kwrd"&gt;&lt;/span&gt;M&lt;span class="kwrd"&gt;&lt;/span&gt;i&lt;span class="kwrd"&gt;&lt;/span&gt;x&lt;span class="kwrd"&gt;&lt;/span&gt;i&lt;span class="kwrd"&gt;&lt;/span&gt;n&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt;s&lt;span class="kwrd"&gt;&lt;/span&gt;w&lt;span class="kwrd"&gt;&lt;/span&gt;i&lt;span class="kwrd"&gt;&lt;/span&gt;m&lt;span class="kwrd"&gt;&lt;/span&gt;I&lt;span class="kwrd"&gt;&lt;/span&gt;n&lt;span class="kwrd"&gt;&lt;/span&gt;t&lt;span class="kwrd"&gt;&lt;/span&gt;e&lt;span class="kwrd"&gt;&lt;/span&gt;r&lt;span class="kwrd"&gt;&lt;/span&gt;f&lt;span class="kwrd"&gt;&lt;/span&gt;a&lt;span class="kwrd"&gt;&lt;/span&gt;c&lt;span class="kwrd"&gt;&lt;/span&gt;e&lt;span class="kwrd"&gt;&lt;/span&gt;D&lt;span class="kwrd"&gt;&lt;/span&gt;e&lt;span class="kwrd"&gt;&lt;/span&gt;l&lt;span class="kwrd"&gt;&lt;/span&gt;e&lt;span class="kwrd"&gt;&lt;/span&gt;g&lt;span class="kwrd"&gt;&lt;/span&gt;a&lt;span class="kwrd"&gt;&lt;/span&gt;t&lt;span class="kwrd"&gt;&lt;/span&gt;e&lt;span class="kwrd"&gt;&lt;/span&gt;;&lt;span class="kwrd"&gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="rem"&gt;// Methods&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt;I&lt;span class="kwrd"&gt;&lt;/span&gt;R&lt;span class="kwrd"&gt;&lt;/span&gt;u&lt;span class="kwrd"&gt;&lt;/span&gt;n&lt;span class="kwrd"&gt;&lt;/span&gt;.&lt;span class="kwrd"&gt;&lt;/span&gt;R&lt;span class="kwrd"&gt;&lt;/span&gt;u&lt;span class="kwrd"&gt;&lt;/span&gt;n&lt;span class="kwrd"&gt;&lt;/span&gt;(&lt;span class="kwrd"&gt;&lt;/span&gt;)&lt;span class="kwrd"&gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt;{&lt;span class="kwrd"&gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;this&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;/span&gt;.&lt;span class="kwrd"&gt;&lt;/span&gt;r&lt;span class="kwrd"&gt;&lt;/span&gt;u&lt;span class="kwrd"&gt;&lt;/span&gt;n&lt;span class="kwrd"&gt;&lt;/span&gt;I&lt;span class="kwrd"&gt;&lt;/span&gt;n&lt;span class="kwrd"&gt;&lt;/span&gt;t&lt;span class="kwrd"&gt;&lt;/span&gt;e&lt;span class="kwrd"&gt;&lt;/span&gt;r&lt;span class="kwrd"&gt;&lt;/span&gt;f&lt;span class="kwrd"&gt;&lt;/span&gt;a&lt;span class="kwrd"&gt;&lt;/span&gt;c&lt;span class="kwrd"&gt;&lt;/span&gt;e&lt;span class="kwrd"&gt;&lt;/span&gt;D&lt;span class="kwrd"&gt;&lt;/span&gt;e&lt;span class="kwrd"&gt;&lt;/span&gt;l&lt;span class="kwrd"&gt;&lt;/span&gt;e&lt;span class="kwrd"&gt;&lt;/span&gt;g&lt;span class="kwrd"&gt;&lt;/span&gt;a&lt;span class="kwrd"&gt;&lt;/span&gt;t&lt;span class="kwrd"&gt;&lt;/span&gt;e&lt;span class="kwrd"&gt;&lt;/span&gt;.&lt;span class="kwrd"&gt;&lt;/span&gt;R&lt;span class="kwrd"&gt;&lt;/span&gt;u&lt;span class="kwrd"&gt;&lt;/span&gt;n&lt;span class="kwrd"&gt;&lt;/span&gt;(&lt;span class="kwrd"&gt;&lt;/span&gt;)&lt;span class="kwrd"&gt;&lt;/span&gt;;&lt;span class="kwrd"&gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt;}&lt;span class="kwrd"&gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt;I&lt;span class="kwrd"&gt;&lt;/span&gt;S&lt;span class="kwrd"&gt;&lt;/span&gt;w&lt;span class="kwrd"&gt;&lt;/span&gt;i&lt;span class="kwrd"&gt;&lt;/span&gt;m&lt;span class="kwrd"&gt;&lt;/span&gt;.&lt;span class="kwrd"&gt;&lt;/span&gt;S&lt;span class="kwrd"&gt;&lt;/span&gt;w&lt;span class="kwrd"&gt;&lt;/span&gt;i&lt;span class="kwrd"&gt;&lt;/span&gt;m&lt;span class="kwrd"&gt;&lt;/span&gt;(&lt;span class="kwrd"&gt;&lt;/span&gt;)&lt;span class="kwrd"&gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt;{&lt;span class="kwrd"&gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;this&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;/span&gt;.&lt;span class="kwrd"&gt;&lt;/span&gt;s&lt;span class="kwrd"&gt;&lt;/span&gt;w&lt;span class="kwrd"&gt;&lt;/span&gt;i&lt;span class="kwrd"&gt;&lt;/span&gt;m&lt;span class="kwrd"&gt;&lt;/span&gt;I&lt;span class="kwrd"&gt;&lt;/span&gt;n&lt;span class="kwrd"&gt;&lt;/span&gt;t&lt;span class="kwrd"&gt;&lt;/span&gt;e&lt;span class="kwrd"&gt;&lt;/span&gt;r&lt;span class="kwrd"&gt;&lt;/span&gt;f&lt;span class="kwrd"&gt;&lt;/span&gt;a&lt;span class="kwrd"&gt;&lt;/span&gt;c&lt;span class="kwrd"&gt;&lt;/span&gt;e&lt;span class="kwrd"&gt;&lt;/span&gt;D&lt;span class="kwrd"&gt;&lt;/span&gt;e&lt;span class="kwrd"&gt;&lt;/span&gt;l&lt;span class="kwrd"&gt;&lt;/span&gt;e&lt;span class="kwrd"&gt;&lt;/span&gt;g&lt;span class="kwrd"&gt;&lt;/span&gt;a&lt;span class="kwrd"&gt;&lt;/span&gt;t&lt;span class="kwrd"&gt;&lt;/span&gt;e&lt;span class="kwrd"&gt;&lt;/span&gt;.&lt;span class="kwrd"&gt;&lt;/span&gt;S&lt;span class="kwrd"&gt;&lt;/span&gt;w&lt;span class="kwrd"&gt;&lt;/span&gt;i&lt;span class="kwrd"&gt;&lt;/span&gt;m&lt;span class="kwrd"&gt;&lt;/span&gt;(&lt;span class="kwrd"&gt;&lt;/span&gt;)&lt;span class="kwrd"&gt;&lt;/span&gt;;&lt;span class="kwrd"&gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt;}&lt;span class="kwrd"&gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;/span&gt;}&lt;/pre&gt;

&lt;p&gt;As you can see, there are two private fields holding a reference to the appropriate mixin, in each of the methods the responsibility for carrying out the action is delegated to the appropriate surrogate mixin object.&lt;/p&gt;

&lt;p&gt;What you will also notice is that you still have to instantiate the surrogate mixin objects. Under normal circumstances that would be in the constructor. If it were a real mixin you wouldn't have the option as the mixin would be created at the same time as the object it is used with. In fact, the mixin would be &lt;em&gt;mixed in&lt;/em&gt; as part of the object itself. So, perhaps interface delegates gives you slightly greater power than with a real mixin as you could reuse the surrogate mixin object. Then again, would you want to? I've not been able to think of a scenario where I would, but perhaps it could be useful.&lt;/p&gt;

&lt;p&gt;I'd like to see interface delegates in C# at some point in the future (sooner rather than later). In fact, I'd like to see proper mixin functionality, but I recon that will require changes to the CLR to support multiple inheritance. In the meantime, I think I'll have to write some sort of snippet in C# to quickly generate the code that Oxygene gives me in one line. Either that or start writing in Oxygene... Now, there's a thought!&lt;/p&gt;

&lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:c4866e66-ce36-4e3d-a1b1-4a4c4b588b76" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/Oxygene" rel="tag"&gt;Oxygene&lt;/a&gt;,&lt;a href="http://technorati.com/tags/C#" rel="tag"&gt;C#&lt;/a&gt;,&lt;a href="http://technorati.com/tags/interface%20delegates" rel="tag"&gt;interface delegates&lt;/a&gt;,&lt;a href="http://technorati.com/tags/mixin" rel="tag"&gt;mixin&lt;/a&gt;&lt;/div&gt;&lt;img src="http://blog.colinmackay.net/aggbug/3302.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Colin Angus Mackay</dc:creator>
            <guid>http://blog.colinmackay.net/archive/2008/08/10/3302.aspx</guid>
            <pubDate>Sun, 10 Aug 2008 23:55:22 GMT</pubDate>
            <wfw:comment>http://blog.colinmackay.net/comments/3302.aspx</wfw:comment>
            <comments>http://blog.colinmackay.net/archive/2008/08/10/3302.aspx#feedback</comments>
            <wfw:commentRss>http://blog.colinmackay.net/comments/commentRss/3302.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Crazy Extension Methods Redux (with Oxygene)</title>
            <link>http://blog.colinmackay.net/archive/2008/08/07/3260.aspx</link>
            <description>&lt;p&gt;Back in April I blogged about a &lt;a href="http://blog.colinmackay.net/archive/2008/04/16/2253.aspx" target="_blank"&gt;crazy thing you can do with extension methods in C#3.0&lt;/a&gt;. At the time I was adamant that it was a bad idea. I still think it is a bad idea, however, my thoughts have evolved a little since then and I have, possibly a solution to my hesitance to use said crazy feature.&lt;/p&gt;  &lt;p&gt;So, if you can't be bothered to click the link, here is a quick recap. You can create an extension method and call it on a null reference and it will NOT throw a &lt;strong&gt;NullReferenceException&lt;/strong&gt; like a real method call would. At the time I was saying it was not best practice because it breaks the semantics of the &lt;a href="http://msdn.microsoft.com/en-gb/library/6zhxzbds.aspx" target="_blank"&gt;dot operator&lt;/a&gt; which is used for member access.&lt;/p&gt;  &lt;p&gt;Last night, I attended an excellent talk by Barry Carr on &lt;a href="http://www.remobjects.com/product/?id={DC0A9947-5FED-4D34-8CC8-F2DCFA87A1FE}" target="_blank"&gt;Oxygene&lt;/a&gt;, an Object Pascal based language that targets the .NET Framework. Oxygene has a very interesting feature, it has a special operator for dealing with calls on a reference that might be null. If that language can do it, what's so wrong with the functionality that Extension methods potentially give? Semantics. Notice that I said that Oxygene has "a special operator". It doesn't use the dot operator. The dot operator still breaks if the reference is null. It has a &lt;a href="http://wiki.remobjects.com/wiki/Colon_Operator" target="_blank"&gt;colon operator&lt;/a&gt;. In this case if the reference is null (or nil as it is called in Oxygene) then the call to the method doesn't happen. No exception is thrown.&lt;/p&gt;  &lt;p&gt;For example. Here is the code with the regular dot operator:&lt;/p&gt;  &lt;pre class="csharpcode"&gt;&lt;strong&gt;&lt;span class="kwrd"&gt;class&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt;m&lt;span class="kwrd"&gt;&lt;/span&gt;e&lt;span class="kwrd"&gt;&lt;/span&gt;t&lt;span class="kwrd"&gt;&lt;/span&gt;h&lt;span class="kwrd"&gt;&lt;/span&gt;o&lt;span class="kwrd"&gt;&lt;/span&gt;d&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt;C&lt;span class="kwrd"&gt;&lt;/span&gt;o&lt;span class="kwrd"&gt;&lt;/span&gt;n&lt;span class="kwrd"&gt;&lt;/span&gt;s&lt;span class="kwrd"&gt;&lt;/span&gt;o&lt;span class="kwrd"&gt;&lt;/span&gt;l&lt;span class="kwrd"&gt;&lt;/span&gt;e&lt;span class="kwrd"&gt;&lt;/span&gt;A&lt;span class="kwrd"&gt;&lt;/span&gt;p&lt;span class="kwrd"&gt;&lt;/span&gt;p&lt;span class="kwrd"&gt;&lt;/span&gt;.&lt;span class="kwrd"&gt;&lt;/span&gt;M&lt;span class="kwrd"&gt;&lt;/span&gt;a&lt;span class="kwrd"&gt;&lt;/span&gt;i&lt;span class="kwrd"&gt;&lt;/span&gt;n&lt;span class="kwrd"&gt;&lt;/span&gt;;&lt;span class="kwrd"&gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&lt;/span&gt;&lt;span class="kwrd"&gt;var&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt;m&lt;span class="kwrd"&gt;&lt;/span&gt;y&lt;span class="kwrd"&gt;&lt;/span&gt;S&lt;span class="kwrd"&gt;&lt;/span&gt;t&lt;span class="kwrd"&gt;&lt;/span&gt;r&lt;span class="kwrd"&gt;&lt;/span&gt;i&lt;span class="kwrd"&gt;&lt;/span&gt;n&lt;span class="kwrd"&gt;&lt;/span&gt;g&lt;span class="kwrd"&gt;&lt;/span&gt;:&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt;S&lt;span class="kwrd"&gt;&lt;/span&gt;t&lt;span class="kwrd"&gt;&lt;/span&gt;r&lt;span class="kwrd"&gt;&lt;/span&gt;i&lt;span class="kwrd"&gt;&lt;/span&gt;n&lt;span class="kwrd"&gt;&lt;/span&gt;g&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt;:&lt;span class="kwrd"&gt;&lt;/span&gt;=&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt;n&lt;span class="kwrd"&gt;&lt;/span&gt;i&lt;span class="kwrd"&gt;&lt;/span&gt;l&lt;span class="kwrd"&gt;&lt;/span&gt;;&lt;span class="kwrd"&gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;/span&gt;b&lt;span class="kwrd"&gt;&lt;/span&gt;e&lt;span class="kwrd"&gt;&lt;/span&gt;g&lt;span class="kwrd"&gt;&lt;/span&gt;i&lt;span class="kwrd"&gt;&lt;/span&gt;n&lt;span class="kwrd"&gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt;C&lt;span class="kwrd"&gt;&lt;/span&gt;o&lt;span class="kwrd"&gt;&lt;/span&gt;n&lt;span class="kwrd"&gt;&lt;/span&gt;s&lt;span class="kwrd"&gt;&lt;/span&gt;o&lt;span class="kwrd"&gt;&lt;/span&gt;l&lt;span class="kwrd"&gt;&lt;/span&gt;e&lt;span class="kwrd"&gt;&lt;/span&gt;.&lt;span class="kwrd"&gt;&lt;/span&gt;W&lt;span class="kwrd"&gt;&lt;/span&gt;r&lt;span class="kwrd"&gt;&lt;/span&gt;i&lt;span class="kwrd"&gt;&lt;/span&gt;t&lt;span class="kwrd"&gt;&lt;/span&gt;e&lt;span class="kwrd"&gt;&lt;/span&gt;L&lt;span class="kwrd"&gt;&lt;/span&gt;i&lt;span class="kwrd"&gt;&lt;/span&gt;n&lt;span class="kwrd"&gt;&lt;/span&gt;e&lt;span class="kwrd"&gt;&lt;/span&gt;(&lt;span class="str"&gt;'The string length is {0}'&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;/span&gt;,&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt;m&lt;span class="kwrd"&gt;&lt;/span&gt;y&lt;span class="kwrd"&gt;&lt;/span&gt;S&lt;span class="kwrd"&gt;&lt;/span&gt;t&lt;span class="kwrd"&gt;&lt;/span&gt;r&lt;span class="kwrd"&gt;&lt;/span&gt;i&lt;span class="kwrd"&gt;&lt;/span&gt;n&lt;span class="kwrd"&gt;&lt;/span&gt;g.L&lt;span class="kwrd"&gt;&lt;/span&gt;e&lt;span class="kwrd"&gt;&lt;/span&gt;n&lt;span class="kwrd"&gt;&lt;/span&gt;g&lt;span class="kwrd"&gt;&lt;/span&gt;t&lt;span class="kwrd"&gt;&lt;/span&gt;h&lt;span class="kwrd"&gt;&lt;/span&gt;)&lt;span class="kwrd"&gt;&lt;/span&gt;;&lt;span class="kwrd"&gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt;C&lt;span class="kwrd"&gt;&lt;/span&gt;o&lt;span class="kwrd"&gt;&lt;/span&gt;n&lt;span class="kwrd"&gt;&lt;/span&gt;s&lt;span class="kwrd"&gt;&lt;/span&gt;o&lt;span class="kwrd"&gt;&lt;/span&gt;l&lt;span class="kwrd"&gt;&lt;/span&gt;e&lt;span class="kwrd"&gt;&lt;/span&gt;.&lt;span class="kwrd"&gt;&lt;/span&gt;R&lt;span class="kwrd"&gt;&lt;/span&gt;e&lt;span class="kwrd"&gt;&lt;/span&gt;a&lt;span class="kwrd"&gt;&lt;/span&gt;d&lt;span class="kwrd"&gt;&lt;/span&gt;L&lt;span class="kwrd"&gt;&lt;/span&gt;i&lt;span class="kwrd"&gt;&lt;/span&gt;n&lt;span class="kwrd"&gt;&lt;/span&gt;e&lt;span class="kwrd"&gt;&lt;/span&gt;(&lt;span class="kwrd"&gt;&lt;/span&gt;)&lt;span class="kwrd"&gt;&lt;/span&gt;;&lt;span class="kwrd"&gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;/span&gt;e&lt;span class="kwrd"&gt;&lt;/span&gt;n&lt;span class="kwrd"&gt;&lt;/span&gt;d&lt;span class="kwrd"&gt;&lt;/span&gt;;&lt;span class="kwrd"&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/pre&gt;

&lt;p&gt;And the result is that the &lt;strong&gt;NullReferenceException&lt;/strong&gt; is thrown:&lt;/p&gt;

&lt;p&gt;&lt;a title="NullReferenceException by Colin  Angus Mackay, on Flickr" href="http://www.flickr.com/photos/colinangusmackay/2741458987/"&gt;&lt;img height="333" alt="NullReferenceException" src="http://farm3.static.flickr.com/2233/2741458987_8e2a47474a_o.png" width="894" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Here is the code with the colon operator:&lt;/p&gt;

&lt;pre class="csharpcode"&gt;&lt;strong&gt;&lt;span class="kwrd"&gt;class&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt;m&lt;span class="kwrd"&gt;&lt;/span&gt;e&lt;span class="kwrd"&gt;&lt;/span&gt;t&lt;span class="kwrd"&gt;&lt;/span&gt;h&lt;span class="kwrd"&gt;&lt;/span&gt;o&lt;span class="kwrd"&gt;&lt;/span&gt;d&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt;C&lt;span class="kwrd"&gt;&lt;/span&gt;o&lt;span class="kwrd"&gt;&lt;/span&gt;n&lt;span class="kwrd"&gt;&lt;/span&gt;s&lt;span class="kwrd"&gt;&lt;/span&gt;o&lt;span class="kwrd"&gt;&lt;/span&gt;l&lt;span class="kwrd"&gt;&lt;/span&gt;e&lt;span class="kwrd"&gt;&lt;/span&gt;A&lt;span class="kwrd"&gt;&lt;/span&gt;p&lt;span class="kwrd"&gt;&lt;/span&gt;p&lt;span class="kwrd"&gt;&lt;/span&gt;.&lt;span class="kwrd"&gt;&lt;/span&gt;M&lt;span class="kwrd"&gt;&lt;/span&gt;a&lt;span class="kwrd"&gt;&lt;/span&gt;i&lt;span class="kwrd"&gt;&lt;/span&gt;n&lt;span class="kwrd"&gt;&lt;/span&gt;;&lt;span class="kwrd"&gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&lt;/span&gt;&lt;span class="kwrd"&gt;var&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt;m&lt;span class="kwrd"&gt;&lt;/span&gt;y&lt;span class="kwrd"&gt;&lt;/span&gt;S&lt;span class="kwrd"&gt;&lt;/span&gt;t&lt;span class="kwrd"&gt;&lt;/span&gt;r&lt;span class="kwrd"&gt;&lt;/span&gt;i&lt;span class="kwrd"&gt;&lt;/span&gt;n&lt;span class="kwrd"&gt;&lt;/span&gt;g&lt;span class="kwrd"&gt;&lt;/span&gt;:&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt;S&lt;span class="kwrd"&gt;&lt;/span&gt;t&lt;span class="kwrd"&gt;&lt;/span&gt;r&lt;span class="kwrd"&gt;&lt;/span&gt;i&lt;span class="kwrd"&gt;&lt;/span&gt;n&lt;span class="kwrd"&gt;&lt;/span&gt;g&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt;:&lt;span class="kwrd"&gt;&lt;/span&gt;=&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt;n&lt;span class="kwrd"&gt;&lt;/span&gt;i&lt;span class="kwrd"&gt;&lt;/span&gt;l&lt;span class="kwrd"&gt;&lt;/span&gt;;&lt;span class="kwrd"&gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;/span&gt;b&lt;span class="kwrd"&gt;&lt;/span&gt;e&lt;span class="kwrd"&gt;&lt;/span&gt;g&lt;span class="kwrd"&gt;&lt;/span&gt;i&lt;span class="kwrd"&gt;&lt;/span&gt;n&lt;span class="kwrd"&gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt;C&lt;span class="kwrd"&gt;&lt;/span&gt;o&lt;span class="kwrd"&gt;&lt;/span&gt;n&lt;span class="kwrd"&gt;&lt;/span&gt;s&lt;span class="kwrd"&gt;&lt;/span&gt;o&lt;span class="kwrd"&gt;&lt;/span&gt;l&lt;span class="kwrd"&gt;&lt;/span&gt;e&lt;span class="kwrd"&gt;&lt;/span&gt;.&lt;span class="kwrd"&gt;&lt;/span&gt;W&lt;span class="kwrd"&gt;&lt;/span&gt;r&lt;span class="kwrd"&gt;&lt;/span&gt;i&lt;span class="kwrd"&gt;&lt;/span&gt;t&lt;span class="kwrd"&gt;&lt;/span&gt;e&lt;span class="kwrd"&gt;&lt;/span&gt;L&lt;span class="kwrd"&gt;&lt;/span&gt;i&lt;span class="kwrd"&gt;&lt;/span&gt;n&lt;span class="kwrd"&gt;&lt;/span&gt;e&lt;span class="kwrd"&gt;&lt;/span&gt;(&lt;span class="str"&gt;'The string length is {0}'&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;/span&gt;,&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt;m&lt;span class="kwrd"&gt;&lt;/span&gt;y&lt;span class="kwrd"&gt;&lt;/span&gt;S&lt;span class="kwrd"&gt;&lt;/span&gt;t&lt;span class="kwrd"&gt;&lt;/span&gt;r&lt;span class="kwrd"&gt;&lt;/span&gt;i&lt;span class="kwrd"&gt;&lt;/span&gt;n&lt;span class="kwrd"&gt;&lt;/span&gt;g&lt;span class="kwrd"&gt;&lt;/span&gt;:&lt;span class="kwrd"&gt;&lt;/span&gt;L&lt;span class="kwrd"&gt;&lt;/span&gt;e&lt;span class="kwrd"&gt;&lt;/span&gt;n&lt;span class="kwrd"&gt;&lt;/span&gt;g&lt;span class="kwrd"&gt;&lt;/span&gt;t&lt;span class="kwrd"&gt;&lt;/span&gt;h&lt;span class="kwrd"&gt;&lt;/span&gt;)&lt;span class="kwrd"&gt;&lt;/span&gt;;&lt;span class="kwrd"&gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt;C&lt;span class="kwrd"&gt;&lt;/span&gt;o&lt;span class="kwrd"&gt;&lt;/span&gt;n&lt;span class="kwrd"&gt;&lt;/span&gt;s&lt;span class="kwrd"&gt;&lt;/span&gt;o&lt;span class="kwrd"&gt;&lt;/span&gt;l&lt;span class="kwrd"&gt;&lt;/span&gt;e&lt;span class="kwrd"&gt;&lt;/span&gt;.&lt;span class="kwrd"&gt;&lt;/span&gt;R&lt;span class="kwrd"&gt;&lt;/span&gt;e&lt;span class="kwrd"&gt;&lt;/span&gt;a&lt;span class="kwrd"&gt;&lt;/span&gt;d&lt;span class="kwrd"&gt;&lt;/span&gt;L&lt;span class="kwrd"&gt;&lt;/span&gt;i&lt;span class="kwrd"&gt;&lt;/span&gt;n&lt;span class="kwrd"&gt;&lt;/span&gt;e&lt;span class="kwrd"&gt;&lt;/span&gt;(&lt;span class="kwrd"&gt;&lt;/span&gt;)&lt;span class="kwrd"&gt;&lt;/span&gt;;&lt;span class="kwrd"&gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;/span&gt;e&lt;span class="kwrd"&gt;&lt;/span&gt;n&lt;span class="kwrd"&gt;&lt;/span&gt;d&lt;span class="kwrd"&gt;&lt;/span&gt;;&lt;span class="kwrd"&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/pre&gt;

&lt;p&gt;And the result is that the program works, it just didn't call the property Length as there was nothing to call it on:&lt;/p&gt;

&lt;p&gt;&lt;a title="Result by Colin  Angus Mackay, on Flickr" href="http://www.flickr.com/photos/colinangusmackay/2742296104/"&gt;&lt;img height="363" alt="Result" src="http://farm4.static.flickr.com/3019/2742296104_c42882aee0_o.png" width="702" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;At this point I really would like to show you what this looks like in Reflector to show you what is going on under the hood, however, I get a message that says "This item is obfuscated and can not be translated" and the code afterwards isn't quite right. However, the crux of it is like this in C#:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;int? length;
    &lt;br /&gt;if (myString != null)

    &lt;br /&gt;    length = myString.Length;

    &lt;br /&gt;Console.WriteLine("The string length is {0}", length);&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Now, back to these extension methods. After seeing this I was thinking that perhaps my total unacceptablity of allowing a null reference to be used with an extension method was perhaps incorrect. In a normal situation with an accidental null reference exception being used the &lt;strong&gt;NullReferenceException&lt;/strong&gt; wouldn't be thrown at the point of the method call (after all, the null reference is actually being passed in as the first parameter in an extension method), but somewhere in the method itself. Normal good practice would place a guard block at the start of the method so that it would be caught immediately.&lt;/p&gt;

&lt;p&gt;However, what if you wanted to create similar functionality to the colon operator in Oxygene and have it ignore the null reference and do nothing? Well, my advice would be to create a naming convention for your extension methods to show that null references will be ignored. That way you can get the functionality with a slight semantic fudge of the dot operator. Of course, you still have to do the work and set up guard blocks to handle the null situation yourself in the extension method.&lt;/p&gt;

&lt;p&gt;Here's an example:&lt;/p&gt;

&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;class&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt;P&lt;span class="kwrd"&gt;&lt;/span&gt;r&lt;span class="kwrd"&gt;&lt;/span&gt;o&lt;span class="kwrd"&gt;&lt;/span&gt;g&lt;span class="kwrd"&gt;&lt;/span&gt;r&lt;span class="kwrd"&gt;&lt;/span&gt;a&lt;span class="kwrd"&gt;&lt;/span&gt;m&lt;span class="kwrd"&gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;/span&gt;{&lt;span class="kwrd"&gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt;M&lt;span class="kwrd"&gt;&lt;/span&gt;a&lt;span class="kwrd"&gt;&lt;/span&gt;i&lt;span class="kwrd"&gt;&lt;/span&gt;n&lt;span class="kwrd"&gt;&lt;/span&gt;(&lt;span class="kwrd"&gt;string&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;/span&gt;[&lt;span class="kwrd"&gt;&lt;/span&gt;]&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt;a&lt;span class="kwrd"&gt;&lt;/span&gt;r&lt;span class="kwrd"&gt;&lt;/span&gt;g&lt;span class="kwrd"&gt;&lt;/span&gt;s&lt;span class="kwrd"&gt;&lt;/span&gt;)&lt;span class="kwrd"&gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt;{&lt;span class="kwrd"&gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt;m&lt;span class="kwrd"&gt;&lt;/span&gt;y&lt;span class="kwrd"&gt;&lt;/span&gt;S&lt;span class="kwrd"&gt;&lt;/span&gt;t&lt;span class="kwrd"&gt;&lt;/span&gt;r&lt;span class="kwrd"&gt;&lt;/span&gt;i&lt;span class="kwrd"&gt;&lt;/span&gt;n&lt;span class="kwrd"&gt;&lt;/span&gt;g&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt;=&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;null&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;/span&gt;;&lt;span class="kwrd"&gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt;C&lt;span class="kwrd"&gt;&lt;/span&gt;o&lt;span class="kwrd"&gt;&lt;/span&gt;n&lt;span class="kwrd"&gt;&lt;/span&gt;s&lt;span class="kwrd"&gt;&lt;/span&gt;o&lt;span class="kwrd"&gt;&lt;/span&gt;l&lt;span class="kwrd"&gt;&lt;/span&gt;e&lt;span class="kwrd"&gt;&lt;/span&gt;.&lt;span class="kwrd"&gt;&lt;/span&gt;W&lt;span class="kwrd"&gt;&lt;/span&gt;r&lt;span class="kwrd"&gt;&lt;/span&gt;i&lt;span class="kwrd"&gt;&lt;/span&gt;t&lt;span class="kwrd"&gt;&lt;/span&gt;e&lt;span class="kwrd"&gt;&lt;/span&gt;L&lt;span class="kwrd"&gt;&lt;/span&gt;i&lt;span class="kwrd"&gt;&lt;/span&gt;n&lt;span class="kwrd"&gt;&lt;/span&gt;e&lt;span class="kwrd"&gt;&lt;/span&gt;(&lt;span class="str"&gt;"The string length is {0}"&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;/span&gt;,&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt;m&lt;span class="kwrd"&gt;&lt;/span&gt;y&lt;span class="kwrd"&gt;&lt;/span&gt;S&lt;span class="kwrd"&gt;&lt;/span&gt;t&lt;span class="kwrd"&gt;&lt;/span&gt;r&lt;span class="kwrd"&gt;&lt;/span&gt;i&lt;span class="kwrd"&gt;&lt;/span&gt;n&lt;span class="kwrd"&gt;&lt;/span&gt;g&lt;span class="kwrd"&gt;&lt;/span&gt;.&lt;span class="kwrd"&gt;&lt;/span&gt;N&lt;span class="kwrd"&gt;&lt;/span&gt;u&lt;span class="kwrd"&gt;&lt;/span&gt;l&lt;span class="kwrd"&gt;&lt;/span&gt;l&lt;span class="kwrd"&gt;&lt;/span&gt;a&lt;span class="kwrd"&gt;&lt;/span&gt;b&lt;span class="kwrd"&gt;&lt;/span&gt;l&lt;span class="kwrd"&gt;&lt;/span&gt;e&lt;span class="kwrd"&gt;&lt;/span&gt;L&lt;span class="kwrd"&gt;&lt;/span&gt;e&lt;span class="kwrd"&gt;&lt;/span&gt;n&lt;span class="kwrd"&gt;&lt;/span&gt;g&lt;span class="kwrd"&gt;&lt;/span&gt;t&lt;span class="kwrd"&gt;&lt;/span&gt;h&lt;span class="kwrd"&gt;&lt;/span&gt;(&lt;span class="kwrd"&gt;&lt;/span&gt;)&lt;span class="kwrd"&gt;&lt;/span&gt;)&lt;span class="kwrd"&gt;&lt;/span&gt;;&lt;span class="kwrd"&gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt;C&lt;span class="kwrd"&gt;&lt;/span&gt;o&lt;span class="kwrd"&gt;&lt;/span&gt;n&lt;span class="kwrd"&gt;&lt;/span&gt;s&lt;span class="kwrd"&gt;&lt;/span&gt;o&lt;span class="kwrd"&gt;&lt;/span&gt;l&lt;span class="kwrd"&gt;&lt;/span&gt;e&lt;span class="kwrd"&gt;&lt;/span&gt;.&lt;span class="kwrd"&gt;&lt;/span&gt;R&lt;span class="kwrd"&gt;&lt;/span&gt;e&lt;span class="kwrd"&gt;&lt;/span&gt;a&lt;span class="kwrd"&gt;&lt;/span&gt;d&lt;span class="kwrd"&gt;&lt;/span&gt;L&lt;span class="kwrd"&gt;&lt;/span&gt;i&lt;span class="kwrd"&gt;&lt;/span&gt;n&lt;span class="kwrd"&gt;&lt;/span&gt;e&lt;span class="kwrd"&gt;&lt;/span&gt;(&lt;span class="kwrd"&gt;&lt;/span&gt;)&lt;span class="kwrd"&gt;&lt;/span&gt;;&lt;span class="kwrd"&gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt;}&lt;span class="kwrd"&gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;/span&gt;}&lt;span class="kwrd"&gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&lt;/span&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt;M&lt;span class="kwrd"&gt;&lt;/span&gt;y&lt;span class="kwrd"&gt;&lt;/span&gt;E&lt;span class="kwrd"&gt;&lt;/span&gt;x&lt;span class="kwrd"&gt;&lt;/span&gt;t&lt;span class="kwrd"&gt;&lt;/span&gt;e&lt;span class="kwrd"&gt;&lt;/span&gt;n&lt;span class="kwrd"&gt;&lt;/span&gt;s&lt;span class="kwrd"&gt;&lt;/span&gt;i&lt;span class="kwrd"&gt;&lt;/span&gt;o&lt;span class="kwrd"&gt;&lt;/span&gt;n&lt;span class="kwrd"&gt;&lt;/span&gt;s&lt;span class="kwrd"&gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;/span&gt;{&lt;span class="kwrd"&gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;public&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;int&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;/span&gt;?&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt;N&lt;span class="kwrd"&gt;&lt;/span&gt;u&lt;span class="kwrd"&gt;&lt;/span&gt;l&lt;span class="kwrd"&gt;&lt;/span&gt;l&lt;span class="kwrd"&gt;&lt;/span&gt;a&lt;span class="kwrd"&gt;&lt;/span&gt;b&lt;span class="kwrd"&gt;&lt;/span&gt;l&lt;span class="kwrd"&gt;&lt;/span&gt;e&lt;span class="kwrd"&gt;&lt;/span&gt;L&lt;span class="kwrd"&gt;&lt;/span&gt;e&lt;span class="kwrd"&gt;&lt;/span&gt;n&lt;span class="kwrd"&gt;&lt;/span&gt;g&lt;span class="kwrd"&gt;&lt;/span&gt;t&lt;span class="kwrd"&gt;&lt;/span&gt;h&lt;span class="kwrd"&gt;&lt;/span&gt;(&lt;span class="kwrd"&gt;this&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt;t&lt;span class="kwrd"&gt;&lt;/span&gt;a&lt;span class="kwrd"&gt;&lt;/span&gt;r&lt;span class="kwrd"&gt;&lt;/span&gt;g&lt;span class="kwrd"&gt;&lt;/span&gt;e&lt;span class="kwrd"&gt;&lt;/span&gt;t&lt;span class="kwrd"&gt;&lt;/span&gt;)&lt;span class="kwrd"&gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt;{&lt;span class="kwrd"&gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;if&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt;(&lt;span class="kwrd"&gt;&lt;/span&gt;t&lt;span class="kwrd"&gt;&lt;/span&gt;a&lt;span class="kwrd"&gt;&lt;/span&gt;r&lt;span class="kwrd"&gt;&lt;/span&gt;g&lt;span class="kwrd"&gt;&lt;/span&gt;e&lt;span class="kwrd"&gt;&lt;/span&gt;t&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt;=&lt;span class="kwrd"&gt;&lt;/span&gt;=&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;null&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;/span&gt;)&lt;span class="kwrd"&gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;return&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;null&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;/span&gt;;&lt;span class="kwrd"&gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;return&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt;t&lt;span class="kwrd"&gt;&lt;/span&gt;a&lt;span class="kwrd"&gt;&lt;/span&gt;r&lt;span class="kwrd"&gt;&lt;/span&gt;g&lt;span class="kwrd"&gt;&lt;/span&gt;e&lt;span class="kwrd"&gt;&lt;/span&gt;t&lt;span class="kwrd"&gt;&lt;/span&gt;.&lt;span class="kwrd"&gt;&lt;/span&gt;L&lt;span class="kwrd"&gt;&lt;/span&gt;e&lt;span class="kwrd"&gt;&lt;/span&gt;n&lt;span class="kwrd"&gt;&lt;/span&gt;g&lt;span class="kwrd"&gt;&lt;/span&gt;t&lt;span class="kwrd"&gt;&lt;/span&gt;h&lt;span class="kwrd"&gt;&lt;/span&gt;;&lt;span class="kwrd"&gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;/span&gt;}&lt;span class="kwrd"&gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;/span&gt;}&lt;span class="kwrd"&gt;&lt;/span&gt;&lt;/pre&gt;

&lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:f636dd39-cbf7-49f5-acba-d8eae1c060a7" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/extension%20methods" rel="tag"&gt;extension methods&lt;/a&gt;,&lt;a href="http://technorati.com/tags/dot%20operator" rel="tag"&gt;dot operator&lt;/a&gt;,&lt;a href="http://technorati.com/tags/colon%20operator" rel="tag"&gt;colon operator&lt;/a&gt;,&lt;a href="http://technorati.com/tags/c#" rel="tag"&gt;c#&lt;/a&gt;,&lt;a href="http://technorati.com/tags/oxygene" rel="tag"&gt;oxygene&lt;/a&gt;,&lt;a href="http://technorati.com/tags/semantics" rel="tag"&gt;semantics&lt;/a&gt;&lt;/div&gt;&lt;img src="http://blog.colinmackay.net/aggbug/3260.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Colin Angus Mackay</dc:creator>
            <guid>http://blog.colinmackay.net/archive/2008/08/07/3260.aspx</guid>
            <pubDate>Thu, 07 Aug 2008 20:45:07 GMT</pubDate>
            <wfw:comment>http://blog.colinmackay.net/comments/3260.aspx</wfw:comment>
            <comments>http://blog.colinmackay.net/archive/2008/08/07/3260.aspx#feedback</comments>
            <slash:comments>2</slash:comments>
            <wfw:commentRss>http://blog.colinmackay.net/comments/commentRss/3260.aspx</wfw:commentRss>
        </item>
    </channel>
</rss>