9

将方法或函数作为数据传递的常用方法有哪些有用的定义,例如:

  • 代表们
  • 闭包
  • 函数指针
  • 通过动态代理调用和
  • 一流的方法?
4

3 回答 3

14

函数指针让您可以像变量一样传递函数。函数指针基本上是在不支持一流方法的语言(例如 C/C++)中传递函数的遗留方法。

一流的方法基本上意味着您可以像变量一样传递函数。方法(松散地)意味着功能。所以这基本上意味着一流的功能。简单来说,这意味着函数被视为“一等公民”,就像变量一样。在过去(C/C++),因为我们不能直接传递函数,我们不得不求助于函数指针之类的变通方法,我们说函数不是一等公民。

Delegates是 C# 对一流方法的回答。委托更强大,因为它涉及闭包,请考虑以下代码片段:

void foo( int a )
{
   void bar() { writefln( a ); }
   call( &bar );
}

void call( void delegate() dg  ) { dg(); }
int main( char[][] args ) {
   foo( 100 );
}

请注意,bar可以引用局部变量a,因为委托可以使用闭包。

闭包一开始可能会让人很困惑。但是懒人的定义可以很简单。这基本上意味着变量可以以人类预期的方式可用。换句话说,通过阅读源代码的结构,可以在看起来像它们存在的地方引用变量。例如,查看上面的代码片段。如果我们没有闭包,bar将无法引用a,因为a它只是本地的foo,但不是bar,这是另一个函数。

动态代理是奇怪的。它不属于这些项目。解释它需要一些很长的文字。它源于著名的代理模式。代理模式的问题是代理类需要实现与主题相同的接口。动态代理基本上意味着使用反射方法来发现 Subject 的方法,以便 ProxyPattern 可以摆脱与 Subject 接口的绑定。

于 2009-06-06T20:24:50.337 回答
0

只是我知道的那些:

  • 函数指针:就是这样,一个指向一段代码的指针。你跳到它,它执行。类型化语言可以强制执行一些参数传递约定(即 C 声明)
  • 闭包:具有某些状态配对的函数。最自然地用词法范围的语言(即Scheme、JavaScript、Lua)编写。多个闭包可以共享相同的状态(或部分状态),使其成为实现 OOP 的简单方法。
  • 第一类方法:从对象实例和方法创建的闭包。一些同时具有闭包和原生 OOP(Python、JavaScript)的语言可以自动创建闭包。
于 2009-06-04T17:55:08.163 回答
0

闭包是一个编程语言的概念。Delegate 是它在 MS.NET 中的实现。

MS.NET 中的委托是指向对象方法的强类型指针(委托实例同时指向对象及其方法)。还有一种方法可以将多个 void 委托实例组合成一个。

于 2009-06-05T13:42:05.097 回答