gpt4 book ai didi

c# - 方法可以附加到具有预定义参数的委托(delegate)吗?

转载 作者:行者123 更新时间:2023-11-30 15:41:04 25 4
gpt4 key购买 nike

有时我会遇到必须将方法附加到委托(delegate)但签名不匹配的情况,例如尝试将 abc 附加到某个字符串参数为“hi”的委托(delegate)。

public class test
{
//...
public void abc(int i, string x)
{
//Do Something
}
//...
}
public class test2
{
somedelegate x;
//...
public test2()
{
//Do Something
test y = new test();
x += y.abc(,"hi");
}
delegate void somedelegate(int i);
}

我可以通过创建另一个具有正确签名的委托(delegate)然后附加它来解决这个问题,但它看起来太复杂了。你能在 C# 中做这样的事情吗?谢谢。

编辑:我想最接近我想要实现的是:

x += (int i) => abc(i, "hi");

最佳答案

是的,你可以用闭包来做到这一点

[在 msdn 上对这个主题有很好的处理,但就像那里的其他任何东西一样很难找到]

大局

  • 编写一个可以接受所有你需要的参数的方法
  • 在该方法中,您返回一个匿名方法,该方法具有所需的委托(delegate)目标签名
  • 这个方法的调用本身就是委托(delegate)实例化中的参数

是的,这有点像 Matrix-y。但是太酷了。

delegate void somedelegate (int i);

protected somedelegate DelegateSignatureAdapter ( string b, bool yesOrNo, ...) {
// the parameters are local to this method, so we'll go w/ that.

// our target delegate requires a single int parameter and void return
return (int a) => {
// your custom code here
// all calling arguements are in scope - use them as needed

}; // don't forget the semicolon!
}

// our delegate call
somedelegate myWarpedDelegate = new somedelegate (DelegateSignatureAdapter("someString", true));
myWarpedDelegate (2543);
myWarpedDelegate(15);

关于c# - 方法可以附加到具有预定义参数的委托(delegate)吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8680146/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com