【原创】C#零基础学习笔记011-事件和委托
其他路径:
****: https://blog.****.net/wodehao0808
微信公众号:程序喵星人
更多资源和视频教程,QQ:1902686547
11 事件和委托
11.1 委托定义
委托和类一样,是一种用户自定义的类型(所以也是引用类型)。但类表示的是数据和方法的集合,而委托则持有一个或多个方法,以及一系列的预定义操作。
委托是类型,就好像类是类型一样。与类一样,委托类型必须在被用来创建变量以及类型的对象之前声明。
delegate void MyDel(int x);
创建委托对象
委托类型 变量
11.1.1 Example: 委托的定义和实现
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
// 委托的定义和实现
namespace Lesson_40_1
{
// 声明一个委托:关于加减乘除,它的返回类型都是double类型,并且参数都有两个参数且是double类型
// delegate 是声明委托的关键字
// 语法:delegate 返回类型 委托名字([参数列表])
delegate double DelOperator(double num1, double num2);
class Program
{
static void Main(string[] args)
{
// 使用委托的时候,需要实例化一个委托对象,参数是方法名
DelOperator delOp = new DelOperator(add);
// 在调用委托的时候,实际上调用的是委托所指向的这个方法
//double result = delOp.Invoke(3, 5);
double result = delOp(3, 5);
Console.WriteLine("委托调用的方法的执行结果:" + result);
// 添加和移除新的委托方法
delOp += new DelOperator(div); // 委托添加一个指向的方法
result = delOp(3, 5);
Console.WriteLine("添加div委托后,结果:" + result);
delOp -= new DelOperator(div); // 委托移除指向的方法
result = delOp(3, 5);
Console.WriteLine("移除div委托后,结果:" + result);
}
static double add(double a, double b)
{
return a + b;
}
static double div(double c, double d)
{
return c - d;
}
}
}
11.2 事件
11.2.1 Exampale: 事件
MobileServer.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Lesson_41_1
{
// 手机服务端的类
public delegate void DelSendMsg(string p_msg);
public class MobileServer
{
// 事件是委托对象的实例
public static DelSendMsg delegateSendMsg;
// 有一个方法,就是将服务端的消息推送给客户端的方法。
public void sendMsg(string p_msg)
{
Console.WriteLine("服务端开始给客户端的手机发送推送的消息");
// 如果客户端已经订阅了该事件
if (delegateSendMsg != null)
{
// 事件的执行,事件的执行是关联到具体的事件绑定的方法的执行。
delegateSendMsg(p_msg);
}
}
}
}
MobileClient.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Lesson_41_1
{
// 手机客户端
public class MobileClient
{
public void dingYue()
{
Console.WriteLine("手机客户端已经订阅了服务端的推送消息");
MobileServer.delegateSendMsg = new DelSendMsg(mobileServer_sendEvent);
}
void mobileServer_sendEvent(string p_msg)
{
Console.WriteLine("这是客户端手机接收到服务端推送的消息");
Console.WriteLine("服务端推送的消息是:" + p_msg);
}
}
}
Program.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
// 事件
namespace Lesson_41_1
{
class Program
{
static void Main(string[] args)
{
MobileClient mclient = new MobileClient();
mclient.dingYue();
MobileServer mserver = new MobileServer();
mserver.sendMsg("这是一个消息事件");
}
}
}