委托

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#基础-委托与事件的更多相关文章

  1. C# 基础 - 委托、事件

    1. 委托 sequenceDiagram 方法->>委托: 返回值和入参一样 委托->>方法: 调用委托就是调用绑定的方法 delegate int NumTest(int ...

  2. .NET基础拾遗(4)委托、事件、反射与特性

    Index : (1)类型语法.内存管理和垃圾回收基础 (2)面向对象的实现和异常的处理基础 (3)字符串.集合与流 (4)委托.事件.反射与特性 (5)多线程开发基础 (6)ADO.NET与数据库开 ...

  3. 【.NET基础】--委托、事件、线程(3)

    之前的两篇文章我们了解了委托和事件,本文我们看一下线程. 1,一个窗体程序,默认拥有一个线程(相当于一个商店里面,只有一个店员),这个默认的线程叫做 UI线程/主线程. 2,进程和线程的关系: A,进 ...

  4. 转载 【.NET基础】--委托、事件、线程(3)

      之前的两篇文章我们了解了委托和事件,本文我们看一下线程. 1,一个窗体程序,默认拥有一个线程(相当于一个商店里面,只有一个店员),这个默认的线程叫做 UI线程/主线程. 2,进程和线程的关系: A ...

  5. 转载 【.NET基础】--委托、事件、线程(2) https://www.cnblogs.com/chengzish/p/4569912.html

    [.NET基础]--委托.事件.线程(2)   本文介绍event的使用以及原理,本文接上一篇文章的Demo继续[下载上一篇Demo] 上一篇我们在类(dg_SayHi.cs)里面定义代理了4个Del ...

  6. 转载 【.NET基础】--委托、事件、线程(1) https://www.cnblogs.com/chengzish/p/4559268.html

    [.NET基础]--委托.事件.线程(1)   1,委托 是存放方法的指针的清单,也就是装方法的容器 A, 新建winform项目[01委托],项目中添加dg_SayHi.cs 委托类 用于存储方法 ...

  7. .NET零基础入门05:委托与事件

    一:前言 本小节,我们需要停一停我们的小游戏开发,虽然它现在还不完美,还很简单,甚至还有BUG.但是,为了更好的理解C#,现在到了该深入了解一些基础知识的时候了. 当然,实际上,本小节内容对于零基础入 ...

  8. C#基础知识之事件和委托

    本文中,我将通过两个范例由浅入深地讲述什么是委托.为什么要使用委托.委托的调用方式.事件的由来..Net Framework中的委托和事件.委托和事件对Observer设计模式的意义,对它们的中间代码 ...

  9. 【.NET基础】--委托、事件、线程(2)

    本文介绍event的使用以及原理,本文接上一篇文章的Demo继续[下载上一篇Demo] 上一篇我们在类(dg_SayHi.cs)里面定义代理了4个Delegate,然后在Button的后台事件中 新建 ...

随机推荐

  1. 通过进入单用户模式解决linux中的rc.local修改后无法启动的问题

    问题:本想将teamviewer这个软件随linux自启动,所以将其启动命令放在rc.local中,但是重启后发现linux启动不起来了,系统前面都是正常启动的,就是无法进入帐户登陆界面,无法输入ro ...

  2. css悬浮右侧悬浮

    <html><head><title>CSSDemo</title><style type"text/css"> .ho ...

  3. ASP .NET 404 Not Found fontawesome-webfont.woff?v=4.0.3

    解决Web部署 svg/woff/woff2字体 404错误最近项目中用到了fontawesome-webfont.svg等字体.部署项目后,发现没有<,+等符号,字体也不对,发现浏览器总是报找 ...

  4. Python的历史与基本知识入门

    一.Python简介 1.1989年由"龟叔"Guido van Rossum在圣诞节期间打发无聊时间编写. 2.Python是一门弱类型解释性语言. 3.优点:代码简洁,明确,优 ...

  5. Android基础Activity篇——销毁活动

    销毁活动只需要添加 finish(); 这个方法即可.相当于back键.

  6. SpringMVC快速入门

    导入开发包 前6个是Spring的核心功能包[IOC],第7个是关于web的包,第8个是SpringMVC包 org.springframework.context-3.0.5.RELEASE.jar ...

  7. java之Socket多线程传递对象

    服务器端利用线程池回复客户端: public class Server implements Runnable { private final ServerSocket server; private ...

  8. Gameplay Classes

    每个虚幻游戏类都是一个.h和一个.cpp组成. 类在虚幻中有便准的命名模式. 前缀: A继承于可量产的游戏性类.他们都是Actor,可以直接在游戏中生成. U继承于所有游戏性对象.不能在游戏中直接生成 ...

  9. java研发常见问题总结 1

    1.java中所有类的父类是什么?他都有什么方法? Object类是所有类的直接或间接基类,如果一个类在声明时未继承基类,Java就默认其基类是Object,故Object被称为根类.该类位于java ...

  10. 修改jupyter notebook的工作路径

    两种方法 一 修改jupyter notebook快捷方式的属性 ①根据下图找到jupyter的快捷方式:jupyter notebook→更多→打开文件位置 ②右键打开属性-将目标一栏中最后的%US ...