how to pass any method as a parameter for another function(如何将任何方法作为另一个函数的参数传递)
问题描述
在A班,我有
internal void AFoo(string s, Method DoOtherThing)
{
if (something)
{
//do something
}
else
DoOtherThing();
}
现在我需要能够将 DoOtherThing
传递给 AFoo()
.我的要求是 DoOtherThing
可以有任何返回类型几乎总是无效的签名.B班就是这样的,
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)
{
}
我知道我可以使用 Action
或通过实现委托(如许多其他 SO 帖子中所见)来做到这一点,但如果 B 类中的函数签名未知,如何实现??
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??
推荐答案
你需要传递一个 delegate
实例;Action
可以正常工作:
You need to pass a delegate
instance; Action
would work fine:
internal void AFoo(string s, Action doOtherThing)
{
if (something)
{
//do something
}
else
doOtherThing();
}
如果 BFoo
是无参数的,它将按照您的示例中所写的那样工作:
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"));
这篇关于如何将任何方法作为另一个函数的参数传递的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:如何将任何方法作为另一个函数的参数传递
基础教程推荐
- 有没有办法忽略 2GB 文件上传的 maxRequestLength 限制? 2022-01-01
- SSE 浮点算术是否可重现? 2022-01-01
- rabbitmq 的 REST API 2022-01-01
- 如何在 IDE 中获取 Xamarin Studio C# 输出? 2022-01-01
- MS Visual Studio .NET 的替代品 2022-01-01
- 如何激活MC67中的红灯 2022-01-01
- 为什么Flurl.Http DownloadFileAsync/Http客户端GetAsync需要 2022-09-30
- 将 XML 转换为通用列表 2022-01-01
- c# Math.Sqrt 实现 2022-01-01
- 将 Office 安装到 Windows 容器 (servercore:ltsc2019) 失败,错误代码为 17002 2022-01-01