In class A, I have
internal void AFoo(string s, Method DoOtherThing)
{
if (something)
{
//do something
}
else
DoOtherThing();
}
Now I need to be able to pass DoOtherThing to AFoo(). My requirement is that DoOtherThing can have any signature with return type almost always void. Something like this from Class B,
void Foo()
{
new ClassA().AFoo("hi", BFoo);
}
void BFoo(//could be anything)
{
}
I know I can do this with Action or by implementing delegates (as seen in many other SO posts) but how could this be achieved if signature of the function in Class B is unknown??
You need to pass a delegate instance; Action would work fine:
internal void AFoo(string s, Action doOtherThing)
{
if (something)
{
//do something
}
else
doOtherThing();
}
If BFoo is parameterless it will work as written in your example:
new ClassA().AFoo("hi", BFoo);
If it needs parameters, you'll need to supply them:
new ClassA().AFoo("hi", () => BFoo(123, true, "def"));
Use an Action or Func if you need a return value.
Action: http://msdn.microsoft.com/en-us/library/system.action.aspx
Func: http://msdn.microsoft.com/en-us/library/bb534960.aspx
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With