委托与事件
一、什么是委托
C#中没有指针。当我们需要在C#中使用函数指针时,我们用委托。委托是一种安全地封装方法的类型,它与 C 和 C++ 中的函数指针类似。
一个委托可以看作是一种类型。
二、委托怎么定义和使用
定义和使用委托需要以下步骤:
1、定义一个委托
public delegate void MyDelegate(string str);
2、定义一个函数
public static void DelegateMethod(string message)
{
System.Console.WriteLine(message);
}
3、用定义的函数将其实例化
MyDelegate handler = DelegateMethod;
4、调用
handler("I’m a delegate");
三、什么是事件
事件是类在发生其关注的事情时用来提供通知的一种方式。例如,封装用户界面控件的类可以定义一个在用户单击该控件时发生的事件。事件使用委托来为触发时将调用的方法提供类型安全的封装。
四、事件怎么定义
public class MyText
{
string t;
//1、定义一个委托
public delegate void MyDelegate(object sender, EventArgs e);
//2、定义一个该委托的事件
public event MyDelegate Changed;
//3、定义一个引发该事件的函数
protected virtual void OnChanged(EventArgs e)
{
if (Changed != null)
{
Changed(this, e);
}
}
//4、定义何时要激发这个事件
public string text
{
get
{
return t;
}
set
{
if(t!=value)OnChanged(new EventArgs());
t = value;
}
}
}
}
五、事件怎么使用
上面已经定义好了一个事件,下面我们使用这个事件:
class Program
{
static void Main(string[] args)
{
MyText myText = new MyText();
// 1、将事件处理程序添加到事件的调用列表中(即事件布线)
myText.Changed += new MyText.MyDelegate(myText_Changed);
string str = "";
while (str != "quit")
{
Console.WriteLine("请输入一个字符串(如果不等于原来的那个,事件就激发了):");
str = Console.ReadLine();
myText.text = str;
}
}
//2、 对Change事件处理的程序
private static void myText_Changed(object sender, EventArgs e)
{
Console.WriteLine("事件激发:文字改变了");
}
}