C#向第三方代理签名添加参数

时间:2011-10-20 21:04:16

标签: c# event-handling

我有一个带有“void Method(string)”签名的第三方代表。 问题是我想/需要将额外的额外信息传递给MySubscribedMethod(为简单起见,请说MyIntArg)。我在订阅时知道这些信息,但我显然不允许更改MySubscribedMethod参数列表。

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

有没有人知道这类问题的优雅解决方法?

谢谢,

1 个答案:

答案 0 :(得分:3)

这就是闭包的设计目的:

int myIntArg = whatever;
ThirdPartyClass.ThirdPartyDelagate += s => MySubscribedMethod(s, myIntArg);

public void MySubscribedMethod(string Arg, int intArg) {}

C#编译器会神奇地为您创建所有必要的基础结构,以确保在调用myIntArg时将MySubscribedMethod传递到ThirdPartyDelegate

(请注意,如果您在循环中使用此内容或在分配了委托后更改myIntArg,那么确切值传递的内容有很多相关内容;请参阅this如果你对血腥细节感兴趣的话)