可以将方法附加到具有预定义参数的委托上吗?
本文关键字:参数 预定义 方法 | 更新日期: 2023-09-27 18:19:09
有时我遇到这样的情况:我必须将一个方法附加到一个委托,但签名不匹配,比如试图将abc附加到某个委托,其中字符串参数为"hi"。
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);
}
我可以通过创建另一个具有正确签名的委托来解决这个问题,然后附加它,但它似乎不必要地复杂。你能在c#中做这样的事情吗?谢谢。
编辑:我想最接近我想要实现的是:
x += (int i) => abc(i, "hi");
是的,您可以使用闭包
[msdn上对主题的处理很好,但像其他任何东西一样很难找到]
The Big Picture
- 写一个可以接受你需要的所有参数的方法
- 在该方法中,返回一个匿名方法,带有它需要的委托目标签名
- 这个方法的调用本身就是委托实例化中的参数
是的,这是一个有点矩阵。但是很酷。
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);
搜索" .net delegate optional parameters "返回一些可能有用的结果:
- 代理可以有可选参数吗?
- VB。有没有办法在委托中使用可选参数?(或计划允许?)
- 可选参数和委托
更新(在上面的第一个链接的帮助下进一步研究):
你可以使用Invoke方法吗?它可以接受任何委托。