将方法或函数作为数据传递的常用方法有哪些有用的定义,例如:
答案 0 :(得分:13)
函数指针允许您像变量一样传递函数。函数指针基本上是传统函数,用于在不支持第一类方法的语言中传递函数,例如C / C ++。
第一类方法基本上意味着您可以像变量一样传递函数。方法(松散地)意味着功能。所以这基本上意味着第一类函数。简单来说,它意味着函数被视为“一等公民”,就像变量一样。在过去(C / C ++),因为我们不能直接传递一个函数,我们不得不求助于函数指针等变通方法,我们说函数不是一等公民。
代表是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
,这是{{1}}另一个功能。
动态代理是奇怪的。它不属于这些项目。解释它需要一些非常长的文本。它起源于着名的Proxy Pattern。 Proxy Pattern的问题在于Proxy类需要实现与Subject相同的接口。动态代理基本上意味着使用反射方法来发现Subject的方法,以便释放ProxyPattern不被绑定到Subject的接口。
答案 1 :(得分:0)
只是我所知道的:
答案 2 :(得分:0)
Closure是一种编程语言概念。 Delegate是它在MS.NET中的实现。
MS.NET中的委托是指向对象方法的强类型指针(委托实例指向两者 - 对象及其方法)。还有一种方法可以将多个void委托实例合并为一个。