型パラメータによって振る舞いを変える

同じ型パラメータだと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( "すとぅりぃぃぃぃんぐ!!" );
		};
	}
}

出力:

いんとだよー
いんとだよー
すとぅりぃぃぃぃんぐ!!