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("今天天气晴朗");
}
}
效果如下:

C#基础-委托与事件的更多相关文章
- C# 基础 - 委托、事件
1. 委托 sequenceDiagram 方法->>委托: 返回值和入参一样 委托->>方法: 调用委托就是调用绑定的方法 delegate int NumTest(int ...
- .NET基础拾遗(4)委托、事件、反射与特性
Index : (1)类型语法.内存管理和垃圾回收基础 (2)面向对象的实现和异常的处理基础 (3)字符串.集合与流 (4)委托.事件.反射与特性 (5)多线程开发基础 (6)ADO.NET与数据库开 ...
- 【.NET基础】--委托、事件、线程(3)
之前的两篇文章我们了解了委托和事件,本文我们看一下线程. 1,一个窗体程序,默认拥有一个线程(相当于一个商店里面,只有一个店员),这个默认的线程叫做 UI线程/主线程. 2,进程和线程的关系: A,进 ...
- 转载 【.NET基础】--委托、事件、线程(3)
之前的两篇文章我们了解了委托和事件,本文我们看一下线程. 1,一个窗体程序,默认拥有一个线程(相当于一个商店里面,只有一个店员),这个默认的线程叫做 UI线程/主线程. 2,进程和线程的关系: A ...
- 转载 【.NET基础】--委托、事件、线程(2) https://www.cnblogs.com/chengzish/p/4569912.html
[.NET基础]--委托.事件.线程(2) 本文介绍event的使用以及原理,本文接上一篇文章的Demo继续[下载上一篇Demo] 上一篇我们在类(dg_SayHi.cs)里面定义代理了4个Del ...
- 转载 【.NET基础】--委托、事件、线程(1) https://www.cnblogs.com/chengzish/p/4559268.html
[.NET基础]--委托.事件.线程(1) 1,委托 是存放方法的指针的清单,也就是装方法的容器 A, 新建winform项目[01委托],项目中添加dg_SayHi.cs 委托类 用于存储方法 ...
- .NET零基础入门05:委托与事件
一:前言 本小节,我们需要停一停我们的小游戏开发,虽然它现在还不完美,还很简单,甚至还有BUG.但是,为了更好的理解C#,现在到了该深入了解一些基础知识的时候了. 当然,实际上,本小节内容对于零基础入 ...
- C#基础知识之事件和委托
本文中,我将通过两个范例由浅入深地讲述什么是委托.为什么要使用委托.委托的调用方式.事件的由来..Net Framework中的委托和事件.委托和事件对Observer设计模式的意义,对它们的中间代码 ...
- 【.NET基础】--委托、事件、线程(2)
本文介绍event的使用以及原理,本文接上一篇文章的Demo继续[下载上一篇Demo] 上一篇我们在类(dg_SayHi.cs)里面定义代理了4个Delegate,然后在Button的后台事件中 新建 ...
随机推荐
- Mac 安装YCM
① 安装Xcode的同时, 安装配套的命令行工具, 包括git, cmake, clang ② 安装Macvim, 并在~/.bashrc文件中设定别名, alias vim="/path/ ...
- CRLF注入攻击
原理:http数据包通过\r\n\r\n来分开http header何http body 实现:首先这种攻击发生在应用层,且发生在服务器返回给我们的http reponse没有经过敏感字符的过滤, ...
- jQuery 3 有哪些新东西
jQuery 的横空出世,至今已有十个年头了,而它的长盛不衰显然不是没有理由的.jQuery 提供了极为友好的接口,使得开发者们可以方便地进行 DOM 操作.发起 Ajax 请求.生成动画……不一而足 ...
- 【小程序报错】 TLS 版本必须大于等于 1.2
服务器是windows 2008 server 环境是IIS7SSL是申请用的阿里免费.微信小程序发现wx.request,调试报错: 小程序要求的 TLS 版本必须大于等于 1.2 直接说解决办法吧 ...
- Redis入门--(二)Redis的安装
1.建议安装在Linux服务器上来运行测试的
- idea 插件描述(转)
提供些idea插件的干货.干货.干货! 如何安装idea plug,方法如下图:如果安装不了考虑下是否代理问题: 1,maven helper 以前查看maven依赖都比较麻烦,需要用命令maven ...
- 运行python文件报SyntaxError:Non-ASCII character '\xe7'
以下是报错内容: 在文件页头加上: #coding=uft-8 ~解决了~ 记录一下(捂脸)
- Annotation版本的HelloWorld
hiberante 的 annotation历史: 在hibernate3以后,开始支持Annotation; 先有hiberante再有JPA,有了JPA标准之后,hibernate写了Annota ...
- Ubuntu 14.04 软件源服务器集合
http://wiki.ubuntu.com.cn/Template:14.04source 服务器列表 可将 http://cn.archive.ubuntu.com/ubuntu/ 替换为下列任意 ...
- jwt 在.net core 2.0的使用
jwt个人觉得更适合作共享session的传递格式,本身保密性不好,容易泄露重要信息,他的格式为头.一些用户的自定义声明.前两者的加密(公私对称密钥形式) 需要引用nuget: System.Iden ...