C# - 将未知类型的函数传递给另一个函数并调用它
在我的程序中,我假设获取一个函数作为参数,并从另一个函数中调用它。可以吗?
谢谢你
In my program i'm suppose to get a function as a parameter, and call it from within another function. can it be done?
thank you
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
当然,您可以只接受
Delegate
并利用Delegate.DynamicInvoke
或Delegate.Method.Invoke
。除非有更多信息,否则这将回答您的问题。因此:
Sure, you could just take in a
Delegate
and utilizeDelegate.DynamicInvoke
orDelegate.Method.Invoke
. Barring more information, this answers your question.Thus:
http://msdn.microsoft.com/en-我们/library/ms173172(v=vs.80).aspx
http://msdn.microsoft.com/en-us/library/ms173172(v=vs.80).aspx
或者您可以使用 lambda 表达式。仍然委托,但编码速度更快。
or you can use lambda expressions. delegate still, but faster to code.
一个例子:
An example:
使用
Func
使用任意函数,同时保持类型安全。这可以通过内置的 Func 泛型类来完成:
给定一个具有以下签名的方法(在本例中,它接受一个 int 并返回一个 bool):
你可以这样称呼它:
您可以将任意函数分配给 Func 实例:
您可以将
f
传递到以后可以使用的地方:请参阅此处 了解更多信息。
当你确实不知道参数,但你愿意支付运行时调查它们的成本时,请使用反射。
在此处了解此内容 。您将传递
MemberInfo
的实例。您可以查询其参数来动态发现它们的数量和类型。使用
动态
以获得完全的自由。没有类型安全。在 C# 4.0 中,您现在拥有
dynamic
关键字。请在此处查看更多信息。
Use
Func
to use arbitrary functions while preserving type safety.This can be done with the built-in Func generic class:
Given a method with the following signature (in this case, it takes an int and returns a bool):
You can call it like this:
You can assign arbitrary functions to a Func instance:
And you can pass that
f
around where it can be used later:See here for more information.
Use Reflection when you really don't know the parameters, but you are willing to pay the cost to investigate them at run time.
Read about this here. You will be passing around instances of
MemberInfo
. You can query its parameters to dynamically discover their number and type.use
dynamic
for complete freedom. There is no type safety.And in C# 4.0, you now have the
dynamic
keyword.See more on this here.