using System.Collections.Generic;
namespace ConsoleApplication2
public abstract string GetPrefix();
public SomeStat(Test cont, string name)
public override string GetPrefix()
Dictionary<string, Stat> statDict = new Dictionary<string, Stat>();
public void AddStat<T>(string statName, Func<Test, string, T> constructor) where T : Stat, new()
string prefix = new T().GetPrefix();
if (!statDict.ContainsKey(prefix + statName))
statDict.Add(prefix + statName, constructor(this, statName));
public static void Main(string[] args)
t.AddStat("Stat1", (cont, name) => new SomeStat(cont, name));