型パラメータによって振る舞いを変える
同じ型パラメータだとstaticフィールドを共有する!という点を悪用した方法。
静的コンストラクタでねじ込んでいるというね!へそ曲がりだね!
利用価値は・・・うーん。
どんなところで活きるかな。 あまり思い浮かばない。苦笑
class Program { static void Main( string[] args ) { GenericTest<int> hoge = new GenericTest<int>(); hoge.Run(); GenericTest<int> hoge2 = new GenericTest<int>(); hoge2.Run(); GenericTest<string>.Foo(); } } public class GenericTest<T> { private delegate void Method(); private static Method method = null; public void Run() { if ( method != null ) method(); } // static版 public static void Foo() { if ( method != null ) method(); } // 静的コンストラクタだよー static GenericTest() { GenericTest<int>.method = delegate { Console.WriteLine( "いんとだよー" ); }; GenericTest<double>.method = delegate { Console.WriteLine( "だぶるだよー" ); }; GenericTest<string>.method = delegate { Console.WriteLine( "すとぅりぃぃぃぃんぐ!!" ); }; } }
出力:
いんとだよー
いんとだよー
すとぅりぃぃぃぃんぐ!!