C#中是否有函数类型?

Luc*_*hez 19 c# types function

我想知道在C#中是否存在类似于AS3的Function类型.我想做这样的somnthing(但在C#中):

private function doSomething():void {
    // statements
}

var f:Function = doSomething
f()
Run Code Online (Sandbox Code Playgroud)

ang*_*son 36

是的,它们在.NET中被称为委托,而不是函数类型.

您可以使用保留关键字delegate来定义新关键字,并且在类库中预定义了很多.

要定义与您的示例匹配的一个:

public delegate void DoSomethingDelegate(Object param1, Object param2);
Run Code Online (Sandbox Code Playgroud)

然后分配它:

DoSomethingDelegate f = DoSomething;
f(new Object(), new Object());
Run Code Online (Sandbox Code Playgroud)

在基类库中还定义了两种通用类型的委托类型,一种用于返回值的方法,另一种用于不返回值的方法,并且它们具有您拥有的参数数量的变体.

这两个Func<..>用于返回值Action<..>的方法,而用于不返回值的方法.

在你的情况下,这将工作:

Action<Object, Object> f = DoSomething;
f(new Object(), new Object());
Run Code Online (Sandbox Code Playgroud)

请注意,在最后一种情况下,您不必声明DoSomethingDelegate.

  • 在Linq中大量使用Func和Action. (2认同)

jsc*_*arf 8

.NET中委托的概念正是您正在寻找的.

链接页面上有一些示例,以及许多教程和深入解释它们的实现和使用方式.谷歌走了!


Din*_*nah 6

它们(对函数的引用)称为委托

这是一本很棒的入门书:http://www.akadia.com/services/dotnet_delegates_and_events.html

  • 它们是后台的完整类,构造函数接受一个函数,但C#2和3完全消除了这个事实,这是一件好事. (2认同)

JP *_*oto 5

是的,有一些名为Delegates的类型安全函数指针.例如 ...

void Main()
{
   object o1 = new object();
   object o2 = new object();

   Action<object, object> act = DoSomething;
   act( o1, o2 );
}

private void DoSomething( object o1, object o2 )
{
  // do that thang
}
Run Code Online (Sandbox Code Playgroud)

Action<T> 是内置的代表......

public delegate void Action<T1, T2>(T1 arg1, T2 arg2)
Run Code Online (Sandbox Code Playgroud)

还有一些名为Lambda Expressions的匿名函数.例如 ...

   List<int> lst = new List<int>() { 1, 2, 3, 4, 5 };
   var res = lst.Where( l => l > 3 );
Run Code Online (Sandbox Code Playgroud)

Where方法的参数是Lambda表达式.查看Eric White的博客,对这些内容进行了很好的讨论:使用C#3.0中的函数编程技术进行查询组合.