using System; using System.Collections.Generic; public class MyDict { public void Add (S key, T value) { S[] sa = new S[1]; T[] ta = new T[1]; sa[0] = key; ta[0] = value; } } public abstract class FastFunc { public abstract S Invoke (T bla); } public class StringFastFunc : FastFunc { public override string Invoke (int bla) { return bla.ToString (); } } public class ArrayFastFunc : FastFunc { public override byte [] Invoke (int bla) { return new byte [bla]; } } public class IntCache { MyDict cache; public T Invoke (FastFunc f, int bla) { if (cache == null) cache = new MyDict (); T value = f.Invoke (bla); cache.Add (bla, value); return value; } } public class main { public static int Main () { StringFastFunc sff = new StringFastFunc (); ArrayFastFunc aff = new ArrayFastFunc (); IntCache ics = new IntCache (); MyDict dss = new MyDict (); dss.Add ("123", "456"); ics.Invoke (sff, 123); ics.Invoke (sff, 456); IntCache ica = new IntCache (); ica.Invoke (aff, 1); ica.Invoke (aff, 2); ica.Invoke (aff, 3); return 0; } }