将方法或函数作为数据传递的常用方法有哪些有用的定义,例如:
- 代表们
- 闭包
- 函数指针
- 通过动态代理调用和
- 一流的方法?
将方法或函数作为数据传递的常用方法有哪些有用的定义,例如:
函数指针让您可以像变量一样传递函数。函数指针基本上是在不支持一流方法的语言(例如 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 接口的绑定。
只是我知道的那些:
闭包是一个编程语言的概念。Delegate 是它在 MS.NET 中的实现。
MS.NET 中的委托是指向对象方法的强类型指针(委托实例同时指向对象及其方法)。还有一种方法可以将多个 void 委托实例组合成一个。