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パターンが実現できる!
・・・っと思ったけど、同一シグネチャの拡張メソッドは呼ばれないんですよね。がっくり。