在变量中引用一个函数?

9

假设我有一个函数。我希望在一个变量中添加对这个函数的引用。

这样,我就可以从变量'bar'调用函数'foo(bool foobar)',就像调用函数一样。例如:'bar(foobar)'。

怎么做呢?

4个回答

23

看起来你想将一个Func保存到变量中以备后用。可以参考这里的例子:

using System;

public class GenericFunc
{
   public static void Main()
   {
      // Instantiate delegate to reference UppercaseString method
      Func<string, string> convertMethod = UppercaseString;
      string name = "Dakota";
      // Use delegate instance to call UppercaseString method
      Console.WriteLine(convertMethod(name));
   }

   private static string UppercaseString(string inputString)
   {
      return inputString.ToUpper();
   }
}

看看方法UppercaseString如何保存到一个名为convertMethod的变量中,然后稍后可以调用它:convertMethod(name)


我猜我可以那么做。但是如果我使用 Func<> 方法,那么我将被限制为最多4个参数。虽然这样做也许可以应付,但如果能避开限制就更好了。 - Steffan Donal
@Ruirize:很有趣,我以前从来没有遇到过这个限制,所以我猜我之前并不知道它。不过看起来这个问题之前已经被讨论过了,我们应该都去看一下:http://stackoverflow.com/questions/3582866/func-for-5-arguments。 - David
听起来很不错!不过,如果我必须为每个单元制作许多这样的东西,我可能会只使用我的Lua解释器。 - Steffan Donal
1
如果假设在 .Net 3.5 中你只能使用 Func<...T4,TResult>,那么安装 Reactive Extensions 可以获得定义到 Func<...T16,TResult> 的支持(这也是 .Net 4 提供的)。 - spender

2
使用委托
    void Foo(bool foobar)
    {
/* method implementation */
    }

使用 Action 委托

Public Action<bool> Bar;
Bar = Foo;

调用该函数;

bool foobar = true;
Bar(foobar);

1

0

你需要知道函数的签名,并创建一个委托

有现成的委托用于返回值的函数用于没有返回类型的函数。前面两个链接都指向通用类型,可以接受多达15个类型参数(因此可用于最多使用那么多参数的函数)。

如果您打算在大于本地范围的范围内使用对函数的引用,则可以考虑定义自己的自定义委托。但是大多数情况下,ActionFunc非常好用。

更新:

请查看这个问题,了解在定义自己的委托或不定义之间的选择。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接