首先看一个C++的函数指针的实例:
int test(int a)
{
console.writeln(a);
return a;
}
//方法一,指针申明一个函数指针变量。
int (*pf)(int x);//申明一个函数指针。
pf=test; //给函数指针复制,即将test函数的地址赋值给函数指针变量pf.
pf(32); //用函数指针调用函数。
//方法二,先申明一个指针类型,然后由类型申明一个指针变量。
type int(*Pf)(int x); //申明一个指针类型。
Pf pf1; //申明一个指针变量。
pf1=test; //给指针变量赋值。
pf1(32); //调用函数。
第二看一个delphi的例子:
type
TMyProc=procedure(x:integer);//申明一种指针类型。
var
pf:TMyProc; //申明一个指针变量。
procedure test(a:integer);
begin
ShowMessage(IntToStr(a));
end;
pf:=Test; //给指针变量赋值。
pf(32); //调用函数。
第三看一个.net的例子:
delegate void Test(int a);//申明一种代理类型。
Test pf; //申明代理变量。
void test(int x)
{
console.writeln(x);
}
pf=new Test(test); //给代理变量赋值
pf(32); //调用函数
由以上的三个实例,不难看出,其实C++中的函数指针,delphi中的函数类型,.net中的代理其实都是一个函数指针。都是从C中的函数指针变相而来。
.net中的事件,其实可以看作是一个代理的实例。其中的event关键字其实就是new关键字的另外一种形式。
int test(int a)
{
console.writeln(a);
return a;
}
//方法一,指针申明一个函数指针变量。
int (*pf)(int x);//申明一个函数指针。
pf=test; //给函数指针复制,即将test函数的地址赋值给函数指针变量pf.
pf(32); //用函数指针调用函数。
//方法二,先申明一个指针类型,然后由类型申明一个指针变量。
type int(*Pf)(int x); //申明一个指针类型。
Pf pf1; //申明一个指针变量。
pf1=test; //给指针变量赋值。
pf1(32); //调用函数。
第二看一个delphi的例子:
type
TMyProc=procedure(x:integer);//申明一种指针类型。
var
pf:TMyProc; //申明一个指针变量。
procedure test(a:integer);
begin
ShowMessage(IntToStr(a));
end;
pf:=Test; //给指针变量赋值。
pf(32); //调用函数。
第三看一个.net的例子:
delegate void Test(int a);//申明一种代理类型。
Test pf; //申明代理变量。
void test(int x)
{
console.writeln(x);
}
pf=new Test(test); //给代理变量赋值
pf(32); //调用函数
由以上的三个实例,不难看出,其实C++中的函数指针,delphi中的函数类型,.net中的代理其实都是一个函数指针。都是从C中的函数指针变相而来。
.net中的事件,其实可以看作是一个代理的实例。其中的event关键字其实就是new关键字的另外一种形式。