Can a method be attached to a delegate with predefined parameters?

…衆ロ難τιáo~ 提交于 2019-12-29 09:05:49

问题


Sometimes I encounter cases where I have to attach a method to a delegate but the signature doesn't match, like trying to attach abc down there to somedelegate with the string parameter being "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);
}

I can work it around by creating another delegate with the correct signature then attaching it but it seems so unnecessarily complex. Can you do something like this in C#? Thanks.

EDIT: I guess there closest to what I wanted to achieve is:

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

回答1:


Yes, you can do this with closures

[there's a nice treatment of the subject on msdn, but like anything else in there it's hard to find]

The Big Picture

  • Write a method that can take all the parameters you need
  • Inside that method you return an anonymous method with the delegate-target signature it requires
  • This method's call is itself the parameter in the delegate instantiation

Yes, this is a bit Matrix-y. But way cool.

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);



回答2:


Just Googling for '.net delegate optional parameters' returns some results that may be useful:

  • Can a Delegate have an optional parameter?
  • VB.NET - Is there a way to utilize optional parameters in delegates? (Or Plans to Allow this?)
  • Optional Parameters and Delegates

Update (researching this some more, and helped by the first link above):

Could you perhaps use the Invoke method, which accepts any delegate?



来源:https://stackoverflow.com/questions/8680146/can-a-method-be-attached-to-a-delegate-with-predefined-parameters

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!