templateの特殊化をやるとしたら
こんな感じかなぁ。
特定のメソッドだけすり替えるのもいいかもしれないけど。
結構無理やりというか,めんどいですね。
もっといい方法はないものか・・・
public class TestPotato { public void Test() { var a = new PotatoMaster<float, double>(); var b = new PotatoMaster<int, int>(); var c = new PotatoMaster<string, double?>(); string message = "do you like potato ??"; a.ShowMessage( message ); b.ShowMessage( message ); c.ShowMessage( message ); } } public interface IPotato { void ShowMessage( string message ); } public class PotatoMaster<T1, T2> : IPotato { private IPotato core = PotatoFactory<T1, T2>.Create(); public void ShowMessage( string message ) { this.core.ShowMessage( message ); } } public static class PotatoFactory<T1, T2> { private delegate IPotato Creator(); private static Creator creator = ( () => new Potato1() ); static PotatoFactory() { PotatoFactory<T1, int>.creator = ( () => new Potato2() ); PotatoFactory<string, double?>.creator = ( () => new Potato3() ); } public static IPotato Create() { return creator(); } } public class Potato1 : IPotato { public void ShowMessage( string message ) { Console.WriteLine( message ); } } public class Potato2 : IPotato { public void ShowMessage( string message ) { Console.WriteLine( "potato ume-------!!!!" ); } } public class Potato3 : IPotato { public void ShowMessage(string message) { Console.WriteLine("potato oisi-------!!!!"); } }
do you like potato ??
potato ume-------!!!!
potato oisi-------!!!!