如何使用委托,使用委托的目的是什么? ----CSDN整理答案
如何使用委托,使用委托的目的是什么?
委托的目的是得到一个安全的函数指针。
C#是一种强类型的语言,因此在C#中任何变量(对象)都必须是有精确而固定的类型。
在C/C++中,函数指针与其它指针一样仅仅是一个32位(大多数情况下)的指针。从实际的数据角度来说函数指针与整数指针等没有任何区别。所以单纯从指针的数据上来说是无法识别出一个指针是指向函数的还是指向整数的,更无法出一个指向函数的指针它带有哪些参数、它们的排列顺序是怎么样的。也就有一种可能:
public int FuncA(int a,int b);
public void FuncB(int a,float b,char c);
本来指向函数FuncA的指针,被当成FuncB的指针调用了。这时程序会产生不可知的错误。
而在C#中由于委托是明确定义的,一个函数指针在赋值之前必须有与之对应的参数列表、返回值。
具体的应用方式是:
委托的目的是得到一个安全的函数指针。
C#是一种强类型的语言,因此在C#中任何变量(对象)都必须是有精确而固定的类型。
在C/C++中,函数指针与其它指针一样仅仅是一个32位(大多数情况下)的指针。从实际的数据角度来说函数指针与整数指针等没有任何区别。所以单纯从指针的数据上来说是无法识别出一个指针是指向函数的还是指向整数的,更无法出一个指向函数的指针它带有哪些参数、它们的排列顺序是怎么样的。也就有一种可能:
public int FuncA(int a,int b);
public void FuncB(int a,float b,char c);
本来指向函数FuncA的指针,被当成FuncB的指针调用了。这时程序会产生不可知的错误。
而在C#中由于委托是明确定义的,一个函数指针在赋值之前必须有与之对应的参数列表、返回值。
具体的应用方式是:
- C# code
-
public delegate int DeleA(int a,int b); public static DeleA dela; public static int TestFunc(int a,int b) { retun a+b; } public static void Main(..) { dela = TestFunc; //这里的TestFunc必须满足DeleA的定义。 int k =dela(3,5); Console.WriteLine(k.ToString()); //这里将输出8 }
关于Delegate 还有一篇好文章就是