有时我会遇到需要将方法附加到委托但但签名不匹配的情况,例如尝试将abc附加到somedelegate,字符串参数为" 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");
答案 0 :(得分:2)
直接搜索“.net委托可选参数”会返回一些可能有用的结果:
更新(通过上面的第一个链接进行更多研究,并提供帮助):
您是否可以使用接受任何委托的Invoke方法?
答案 1 :(得分:2)
是的,您可以使用闭包执行此操作
[在msdn上对这个主题进行了很好的处理,但就像其他任何东西一样很难找到]
大图
是的,这有点像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);