我有多个具有共同基本类型的类。我想要一个将基本类型的任何子类作为参数的委托。我将其想象为类似这样的东西,但这是行不通的:

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;

08-26 18:27