我有一个带有“void Method(string)”签名的第三方代表。 问题是我想/需要将额外的额外信息传递给MySubscribedMethod(为简单起见,请说MyIntArg)。我在订阅时知道这些信息,但我显然不允许更改MySubscribedMethod参数列表。
ThirdPartyClass.ThirdPartyDelagate += MySubscribedMethod; // Want to provide MyIntArg
public void MySubscribedMethod(string Arg) {} // Would like to receive MyIntArg
有没有人知道这类问题的优雅解决方法?
谢谢,
答案 0 :(得分:3)
这就是闭包的设计目的:
int myIntArg = whatever;
ThirdPartyClass.ThirdPartyDelagate += s => MySubscribedMethod(s, myIntArg);
public void MySubscribedMethod(string Arg, int intArg) {}
C#编译器会神奇地为您创建所有必要的基础结构,以确保在调用myIntArg
时将MySubscribedMethod
传递到ThirdPartyDelegate
(请注意,如果您在循环中使用此内容或在分配了委托后更改myIntArg
,那么确切值传递的内容有很多相关内容;请参阅this如果你对血腥细节感兴趣的话)