C#基础-委托与事件
委托
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;
做一个案例:
需要写两个类。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("今天天气晴朗");
}
}
效果如下: