nullオブジェクトのメソッド呼び出し

ちょっとした遊び。

using System;

namespace NullObject3
{
    class Program
    {
        static void Main (string[] args)
        {
            string s = "Hello, World";
            Console.WriteLine(s.GetLength());

            // null文字列のメソッドを呼び出す。
            s = null;
            Console.WriteLine(s.GetLength());
        }
    }
}

/* 結果
12
0
 */

2回目のGetLength()はnull参照に対しての呼び出しなので、ぱっと見た目、おっと思いますが・・・
その正体は単なる拡張メソッドでした。(^^;

namespace NullObject3
{
    public static class NullString
    {
        public static int GetLength(this string s)
        {
            if (s == null)
                return 0;
            return s.Length;            
        }
    }
}

これを使えばNullObjectパターンが実現できる!

・・・っと思ったけど、同一シグネチャの拡張メソッドは呼ばれないんですよね。がっくり。