機能追加

先日のNyaRuRuさんのエントリ(d:id:NyaRuRu:20080328:p1)の考え方は自分の中に無かった。面白かったです。便利そうだけどパッと応用例が浮かばない・・・。C++屋さんなら得意かもしれませんね。
MC++Dの「1.8 機能追加と不完全な実体化」にちょっと似てる気がするので。


こうすると暗黙のインターフェイス以外無いのでちょっとだけ動的チック・・・?

class Program
{
	static void Main(string[] args)
	{
		var product = TypeSelector<string>.Factory.Create();
		product.Hello();
	}
}

public class TypeSelector<T>
{
	private TypeSelector() { }
	public static readonly TypeSelector<T> Factory = new TypeSelector<T>();
}
public static class Extention
{
	public static Bar1 Create( this TypeSelector<int> f ) { return new Bar1(); }
	public static Bar2 Create<T>( this TypeSelector<T> f ) { return new Bar2(); }

	public class Bar1
	{
		public int GetValue() { return 1; }
	}
	public class Bar2
	{
		public int GetValue() { return 2; }
		public void Hello() { Console.WriteLine( "hello" ); }
	}
}