我将动作存储为委托。我也将T存储为接口。

以后有什么方法可以调用Action并传递对象吗?

public class MyAction {
    public IMyObject IMyObject { get; set; }
    public Delegate myDelegate { get; set; }
    public Type IMyObjectType { get; set; }
}


其中IMyObject是一个空接口

public interface IMyObject { }


我从动作回调创建MyAction实例

public static MyAction Factory<T>(Action<T> callback) {
            return new MyAction() {
                myDelegate = callback, IMyObjectType = typeof (T)
            };
        }


是否可以调用委托并传递IMyObject?

稍后,我在尝试调用Delegate(Action)之前设置了IMyObject。

最佳答案

如果类型不是固定的(例如:只是Delegate,而您不知道T),则可以使用:

action.myDelegate.DynamicInvoke(args);


但这比较慢。如果您要进行大量操作,则应避免这种情况。坦白地说,在整个过程中仅使用Action<object>(或类似名称)并在回调中进行强制转换会更有效-然后您的代码将知道委托类型并可以使用常规调用。

09-18 10:54