C#基础-委托与事件

时间:2023-01-22 04:27:27

委托

delegate是申明委托的关键字

返回类型都是相同的,并且参数类型个数都相同

委托声明

delegate double DelOperater(double num1, double num2);

实例化委托对象

class Program
{
static void Main(string[] args)
{
DelOperater delOp = new DelOperater(Add);
} static double Add(double a,double b)
{
return a + b;
}
}

委托的调用

double r1 = delOp.Invoke(3, 5);     // 第一种方法
double r2 = delOp(3, 5); // 第二种方法

委托增加指向方法

delOp += new DelOperater(Sub);  // 减法被传递进来

委托去除指向方法

delOp -= new DelOperater(Sub);  // 减法被移出去

案例:关于加减乘除的委托,它的返回值都是double类型,并且都有两个double的参数

namespace ConsoleApp7
{
// delegate是申明委托的关键字
// 关于加减乘除的委托,它的返回值都是double类型,并且都有两个double的参数
delegate double DelOperater(double num1, double num2);
class Program
{
static void Main(string[] args)
{
// 使用委托的时候需要实例化委托对象
// 在实例化委托时,会把方法名作为一个参数传进来,
DelOperater delOp = new DelOperater(Add);
// 在调用委托时,实际上调用的是委托指向的方法
double r1 = delOp.Invoke(3, 5);
Console.WriteLine("委托调用的方法的执行结果:" + r1);
double r2 = delOp(3, 5);
Console.WriteLine("委托调用的方法的执行结果:" + r2);
delOp += new DelOperater(Sub); // 减法被传递进来
double r3 = delOp.Invoke(3, 5);
Console.WriteLine("委托调用的方法的执行结果:" + r3);
double r4 = delOp(3, 5);
Console.WriteLine("委托调用的方法的执行结果:" + r4);
} static double Add(double a,double b)
{
return a + b;
}
static double Sub(double a,double b)
{
return a - b;
}
}
}

事件

事件定义的方法

// 定义一个事件,就是委托的实例对象
public static event DelSendMsg sendEvent;

做一个案例:

C#基础-委托与事件

需要写两个类。MoblieServer和MobileClient

手机服务器端

using System;
using System.Collections.Generic;
using System.Text; namespace ConsoleApp7
{
// 手机服务器端
public delegate void DelSendMsg(string msg);
class MobileServer
{
// 定义一个事件,就是委托的实例对象
public static event DelSendMsg sendEvent; // 将服务器推送到客户端方法
public void SendMsg(string msg)
{
Console.WriteLine("服务器给客户端手机发送消息");
// 如果客户端订阅了该事件
if (sendEvent != null)
{
sendEvent(msg);// 事件的执行,事件的执行实践上关联到具体事件绑定的方法的执行
}
}
}
}

手机客户端

using System;
using System.Collections.Generic;
using System.Text; namespace ConsoleApp7
{
// 手机客户端
class MobileClient
{
// 客户端订阅服务器端推送消息功能
public void Dingyue()
{
Console.WriteLine("手机客户端已经订阅了服务端订阅消息");
MobileServer.sendEvent += new DelSendMsg(mobServer_sendEvent);
} private void mobServer_sendEvent(string msg)
{
Console.WriteLine("这是客户端接收到服务器端推送的消息:"+msg);
}
}
}

主程序

class Program
{
static void Main(string[] args)
{
MobileServer moserver = new MobileServer();
MobileClient moclient = new MobileClient();
moclient.Dingyue();
moserver.SendMsg("今天天气晴朗");
}
}

效果如下:

C#基础-委托与事件