我有多个具有共同基本类型的类。我想要一个将基本类型的任何子类作为参数的委托。我将其想象为类似这样的东西,但这是行不通的:
private delegate void ActionDelegate(BaseAction action);
class ChildAction : BaseAction
{
}
public static class SomeOtherClass
{
public void ProcessChildAction(ChildAction childAction)
{
}
public void Main()
{
ChildAction childAction = new ChildAction();
ActionDelegate actionDelegate = ProcessChildAction;
actionDelegate(childAction);
}
}
我已经试过了:
private delegate void ActionDelegate<T>(T action);
但这似乎会让任何类通过,而我只需要
BaseAction
的任何子类。即使这样,我在执行此操作时似乎也无法对其进行编译,因此我不确定这是否是正确的方法。另外,我正在使用Unity,因此仅限于C#3.5。
最佳答案
使用约束:
private delegate void ActionDelegate<T>(T action) where T : BaseAction;