是否可以'overeride' (?) 调用委托包装器的方式?所以代替meAction.Invoke()我可以只做meAction()?



我有一个名为SerializedAction的委托包装

[Serializable]
public class SerializedAction
{
   private Action action;
   public void Add (Action handler) {...}
   public void Remove (Action handler) {...}
   public void Invoke () { Get().Invoke(); }
   public static SerializedAction operator +(SerializedAction action, Action handler) {...}
   public static SerializedAction operator -(SerializedAction action, Action handler) {...}
   private RebuildInvocationList() {...}
   private Action Get() {...}
   ...
}

我已经设法重载+/-操作符,所以我不必显式地调用AddRemove -但是每当我想调用时,我必须调用Invoke -我想知道是否有一种方法可以像普通委托一样调用它,即

var meAction = new SerializedAction();
meAction += handler;
meAction(); // instead of meAction.Invoke()?

这可能吗?

谢谢。

不幸的是,这在c#中是不可能的。"()"语法简单地编译为对Delagate.Invoke()的调用;它不是一个可重写的操作符。由于普通的c#类不能扩展Delegate或MulticastDelegate,因此你不能让编译器允许你在你的类中使用()语法。也就是说,通过创建扩展MulticastDelegate的类型并将其编译为一个单独的程序集,然后从c#代码中引用,可能有可能对原始IL做类似的事情。

相关内容

  • 没有找到相关文章

最新更新