委托和事件
委托和事件在 C# 中是非常重要的,如果不能掌握这两种方法,那么就永远不能成为一个好的 C# 程序员。而委托和事件则属于会者不难,难者不会的情况。
C# 委托(Delegate)
我们就先讲委托,暂时不要提及事件,虽然事件是委托的高级抽象,如果将两者一起讲,初学者不容易理解。
- C# 中的委托(Delegate)类似于 C 或 C++ 中函数的指针。委托(Delegate) 是存有对某个方法的引用的一种引用类型变量。引用可在运行时被改变。
- 委托(Delegate)特别用于实现事件和回调方法。所有的委托(Delegate)都派生自 System.Delegate 类 。
如果了解C 或 C++ 中的指针,那么相对来说委托就很简单了,当然也会有一部分同学没有接触过 C 或 C++,那我先说用简单易懂的方式来解释一下上面过于委托的定义。
我们可以将 委托 理解成类似 string 一样的类型,string类型的变量可以存储字符串,那么委托 的变量就可以存储** 函数** 。而在代码运行的时候,我们可以改变委托类型的变量值。(这一点不理解的话,看了后面的代码演示就很清楚了)
声明委托(Delegate)
委托声明决定了可由该委托引用的方法。委托可指向一个与其具有相同标签的方法。
声明一个委托,和声明一个string类型是一样的。
public delegate int MyDelegate (string s);
delegate 是委托的类型,MyDelegate 是委托的命名。该委托可被用于引用任何一个带有一个单一的 string 参数的方法,并返回一个 int 类型变量。
using System;
namespace DeletegateAndEvent
{
public delegate int MyDeletegate(string s);
class MainClass
{
public static void Main (string[] args)
{
MyDeletegate myDelegate = PrintInfo;
myDelegate += PrintInfo2;
myDelegate ("委托就是这么用的!");
}
public static int PrintInfo(string s)
{
Console.WriteLine (s);
return 10;
}
public static int PrintInfo2(string s)
{
Console.WriteLine (s+"2");
return 10;
}
}
}