c#为第三方委托签名添加参数

本文关键字:添加 参数 第三方 | 更新日期: 2023-09-27 18:11:59

我有一个带有"void Method (string)"签名的第三方委托。问题是我想要/需要传递额外的附加信息给MySubscribedMethod(简单起见,我们说MyIntArg)。我在订阅时就知道这些信息,但显然不允许修改MySubscribedMethod参数列表。

ThirdPartyClass.ThirdPartyDelagate += MySubscribedMethod; // Want to provide MyIntArg
public void MySubscribedMethod(string Arg) {} // Would like to receive MyIntArg

有谁知道一个优雅的工作围绕这种类型的问题?

c#为第三方委托签名添加参数

这就是设计闭包的目的:

int myIntArg = whatever;
ThirdPartyClass.ThirdPartyDelagate += s => MySubscribedMethod(s, myIntArg);
public void MySubscribedMethod(string Arg, int intArg) {}

c#编译器将神奇地为你创建所有必要的基础设施,以确保当ThirdPartyDelegate被调用时,myIntArg被传递到MySubscribedMethod

(注意,有各种微妙的确切值被传递,只有当你在一个循环中使用这个或改变myIntArg后,你已经分配了委托;如果你对血腥的细节感兴趣,可以看看这个)