C#的委托与C语言下的函数指针比较
《C#高级编程》里说“.Net已委托的形式实现了函数指针的概念”,这里简单比较一下两者的区别:
1 首先看看C下的“函数指针”如何声明和定义一个函数变量:
typedef int (*FUNC)(int x, int y); //声明
FUNC func; //定义一个“函数变量”
当已经有这样一个实现的函数时:
int SomeFn(int m, int n)
{
//函数实现
}
就可以将这个SomeFn 函数名赋值给 func变量:
func = SomeFn;
使用它:
func(100, 200)
2 再来看看C#里委托如何实现上面所说,仍然使用上述的SomeFn函数实现:
声明一个委托“类”(在C#中没有全局函数概念,只有类):
private delegate void FUNC (int x, int y ); // private是public没关系
也的确,当你写完了上句后,在VS2005中,发现Func是和其他的“类”是并列的。
再来声明一个变量,并new一个:
FUNC func = new FUNC (SomeFn)
注意new后面函数名后跟的参数不是SomeFn的两个参数,而是SomeFn本身函数名,不过,这时的SomeFn实现若放在同一个类中,需添加一个static 关键字。
使用它,同上面的C语言一样:
func(100, 200)
有了上述基本概念,可以对付一般的编程问题了。C语言中的函数指针做函数参数、C#委托的多播及做数组,请再查其他资料吧。