我认为你能达到的最佳效果是:
public static class DoSomething
{
public static void Execute<T,K>(K oldObj, K newObj)
where T : BaseAction<K>, new()
{
T action = new T();
action.Commit(oldObj, newObj);
}
}
您必须指定:
DoSomething.Execute<SpecificAction, int>(5,4);
我怀疑是否有编译时方法可以推断基类的泛型参数。
我有另一个想法(我不建议,但要记录在案):
public static void Execute<T, K>(Func<T> constructor, K oldObj, K newObj)
where T : BaseAction<K> // no `new()` necessary
{
T action = constructor();
action.Commit(oldObj, newObj);
}
您可以将其用于:
DoSomething.Execute(() => new SpecificAction(), 4, 5);