【问题标题】:Can I pass a method as a parameter?我可以将方法作为参数传递吗?
【发布时间】:2015-12-29 03:17:23
【问题描述】:

我正在开发几个生成字符串的插件方法,并将其传递回我的主要方法。从这里,我可以想出一个序列号。但是,我想避免将插件集成到我的主程序中 - 基本上任何迫使我以任何方式更改我的主程序以识别此插件的东西都是禁止的。

所以 - 在我的主程序中,我生成了一个字符串,然后将它与其他匹配的字符串进行匹配以找出序列号。问题是我需要知道这个字符串的格式,所以我知道在哪里输入这个数字。

我在考虑是否可能传入一个知道该字符串匹配函数的方法,但我不确定如何将方法从一个程序传递到另一个程序。

我找到了this 的问题,但这似乎只是在同一个程序中。

【问题讨论】:

  • 可以,如果该方法返回值
  • 我建议使用Func<String, String> 作为参数; 委托是第二选择。
  • 您是否担心将方法作为参数传递(Action<>Func<>delegate)在不同的程序集之间不起作用?还是您正在处理多个进程?
  • 当您认为将函数作为参数传递时,您可以使用委托。休息一下,你的问题不清楚。

标签: c# methods parameters


【解决方案1】:

在 C# 中,您可以将一个方法作为另一个方法的参数传递,前提是它返回接收方方法所期望的内容。因此,鉴于此:

public int Foo(){ ... }


public void Bar(int i) { ... }

你可以这样做:...Bar(this.Foo());

但是,我认为您实际上追求的是delegates,它们本质上是函数指针。这将允许您从其他方法调用委托所指向的方法。

作为旁注,您可以考虑查看Strategy Design Pattern。此模式允许您从根本上确定在运行时调用哪种行为(逻辑)。

【讨论】:

  • 您的示例将方法调用的返回值作为参数传递,而不是方法本身。您可能需要阅读 Action<>Func<>(在引入 delegates 之后将它们添加到语言中)。
  • @PieterWitvoet:是的例子之一,但我也澄清了代表。函数不解析为委托吗?
  • 你说得对,它们非常相似。我发现Action<>Func<> 在实践中更方便,特别是因为它们不需要委托声明。它们的主要限制是您不能使用 refout 参数。至于示例,鉴于问题是关于如何将方法作为参数传递,如果您问我,使用委托的示例会更有意义。
【解决方案2】:

首先,对于您的情况,您不需要传递该方法。您可以将该方法公开并在同一命名空间中的另一个程序中访问,例如:- ClassObject.Method();... 这里的对象应该是定义您的方法的类

如果参数的类型与方法的返回类型相同,则在调用时可以包含函数的返回值作为参数(例如:- testapp(Square(x)))。在另一种情况下代表可能很有用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-19
    • 2018-10-11
    • 2016-12-17
    • 1970-01-01
    • 2011-02-24
    相关资源
    最近更新 更多