public class AbilityClass<T>where T : struct, IComparable<T>
public AbilityClass(T baseValue, T increase)
this.baseValue = baseValue;
this.increase = increase;
public T GetStat(int level)
dynamic baseVal = baseValue;
return (T)(baseVal + level * inc);
public static void Main()
var abilityInt = new AbilityClass<int>(1, 2);
var abilityFloat = new AbilityClass<float>(1.1f, 2.2f);
Console.WriteLine(abilityInt.GetStat(3));
Console.WriteLine(abilityFloat.GetStat(3));