C#委托-事件示例
Program.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Event_Delegate
{
class Program
{
static void Main(string[] args)
{
A a = new A(); //定义首领A
B b = new B(a);
a.Raise("左");
Console.ReadLine();
//====
var test = new Heater();
test.Onboiled += TestOnboiled;
test.Onboiled += TestOnboiled;
test.Begin();
Console.ReadKey();
}
static void TestOnboiled(object sender, EventArgs e)
{
Console.WriteLine("Hello 事件被调用");
}
}
public delegate void RaiseEventHandler(string hand);
/// <summary>
/// 首领A
/// </summary>
public class A
{
/// <summary>
/// 首领A举杯事件
/// </summary>
public event RaiseEventHandler RaiseEvent;
public void Raise(string hand)
{
Console.WriteLine("首领A举杯");
//调用举杯事件,传入左或右手作为参数
if (RaiseEvent != null)
{
RaiseEvent(hand);
}
}
}
/// <summary>
/// 部下B
/// </summary>
public class B
{
A a;
public B(A a)
{
this.a = a;
a.RaiseEvent += new RaiseEventHandler(a_raiseEvent);
}
void a_raiseEvent(string hand)
{
if (hand.Equals("左"))
{
Console.WriteLine("部下B发起攻击 ");
}
}
}
}
Client_1.cs:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Threading;
namespace Event_Delegate
{
class Client_1
{
}
public class Heater
{
public event EventHandler Onboiled;
private void RasieBoiledEvent()
{
if (Onboiled == null)
{
Console.WriteLine("加热完成,处理订阅事件为空");
}
else
{
Onboiled(this,new EventArgs());
}
}
private Thread heatThread;
public void Begin()
{
heatTime = 5;
heatThread = new Thread(new ThreadStart(Heat));
heatThread.Start();
Console.WriteLine("加热器已经开启",heatTime);
}
private int heatTime;
private void Heat()
{
while (true)
{
Console.WriteLine("加热还需要{0} 秒",heatTime);
if (heatTime == 0)
{
RasieBoiledEvent();
return;
}
heatTime--;
Thread.Sleep(1000);
}
}
}
}
C#委托-事件示例的更多相关文章
- Observer设计模式中-委托事件-应用在消息在窗体上显示
Observer设计模式:监视者模式.在类中的方法中处理的结果或者消息通过事件委托 的方式发送给主窗体. 因为在其它类中直接访问主窗体类,显示内容是不能直接调用控件赋值的,当然也有别的类似查阅控件名, ...
- python 全栈开发,Day55(jQuery的位置信息,JS的事件流的概念(重点),事件对象,jQuery的事件绑定和解绑,事件委托(事件代理))
一.jQuery的位置信息 jQuery的位置信息跟JS的client系列.offset系列.scroll系列封装好的一些简便api. 一.宽度和高度 获取宽度 .width() 描述:为匹配的元素集 ...
- 理解jquery on 委托事件的机制
前两天做了一个点击任意位置,都能关闭菜单的功能,因为菜单里面的每一个a,的点击事件都是用on绑定的.所以在阻止冒泡的时候不管用,今天特意来理解一下on的机制 on 是委托事件,利用的就是冒泡原理 $( ...
- .NET Core 跨平台物联网开发:设置委托事件(二)
系列教程目录 (一) 连接阿里云IOT (二) 设置委托事件 (三) 上报属性 (四) SDK文档 属性.方法.委托.类 http://pan.whuanle.cn/index.php?dir=up ...
- jQuery---jQ动画(普通,滑动,淡入淡出,自定义动画,停止动画),jQuery的事件,jQ事件的绑定/解绑,一次性事件,事件委托,事件冒泡,文档加载
jQuery---jQ动画(普通,滑动,淡入淡出,自定义动画,停止动画),jQuery的事件,jQ事件的绑定/解绑,一次性事件,事件委托,事件冒泡,文档加载 一丶jQuery动画 show,hide, ...
- C# ~ 从 委托事件 到 观察者模式 - Observer
委托和事件的部分基础知识可参见 C#/.NET 基础学习 之 [委托-事件] 部分: 参考 [1]. 初识事件 到 自定义事件: [2]. 从类型不安全的委托 到 类型安全的事件: [3]. 函数指针 ...
- C#委托,事件理解入门 (译稿)
原文地址:http://www.codeproject.com/Articles/4773/Events-and-Delegates-Simplified 引用翻译地址:http://www.cnbl ...
- 关于ios使用jquery的on,委托事件失效
$('.parents').on("click",'.child',function(){}); 类似上面这种,在ios上点击"child"元素不会起作用,解决 ...
- Asp.net用户控件和委托事件
在Asp.net系统制作过程中,门户类型的网站,我们可以用DIV+CSS+JS+Ajax全部搞定,但是一旦遇到界面元素比较复杂的时候,还是UserControl比较方便一些,各种封装,各种处理,然后拖 ...
随机推荐
- 【STM32H7教程】第58章 STM32H7的硬件JPEG应用之图片解码显示
完整教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980 第58章 STM32H7的硬件JPEG应用之图片解 ...
- 【Hibernate 一对多】
OneToMany public class OneToMany { @Test public void testAdd1() { SessionFactory sessionFactory = nu ...
- Nginx正则及 Location匹配!
1:Nginx location 规则匹配 ^~ 标识符匹配后面跟一个字符串.匹配字符串后将停止对后续的正则表达式进行匹配. 如:location ^~ /images/, 在匹配 ...
- windows网络编程-C语言实现简单的TCP协议聊天
TCP/IP协议(面向连接协议)类似于打电话时,对方一定在手机附近并且此刻都在和对方进行通话.一定保证双方都在线,才能进行数据传输.UDP/IP协议(无连接协议)就像邮箱,不保证对方一定在等你邮件且对 ...
- js中字符串转json对象时报错: Uncaught SyntaxError: Unexpected token s in JSON at position 2
解决方法: js中获取jsp的返回值 var json='${channels}' var channels = JSON.parse(json);就报上面的错. json的值最终会转成这种json格 ...
- WCF 数据传输SIZE过大
1.当客户端调用WCF服务时,接受数据过大,可通过以下配置解决 <basicHttpBinding> <binding name="BasicHttpBinding_Wcf ...
- leetCode练题——9. Palindrome Number
1.题目 9. Palindrome Number Determine whether an integer is a palindrome. An integer is a palindrome ...
- Centos 下安装php
1 从php 官网下载源安装包 http://php.net/downloads.php // 安装php 扩展 2 yum install libxml2 libxml2-devel openssl ...
- Spring Boot 项目本地运行无异常,部署到 Linux 服务器运行报错:java.lang.ClassNotFoundException
一 背景 最近在用 Springboot 开发项目 A,引了小伙伴开发的模块 B,本地起服务,运行的好好的,等部署到服务器上,一运行就报错:Caused by: java.lang.ClassNotF ...
- idea激活,使用破解补丁无需注册码
idea激活,使用破解补丁无需注册码 2017年08月19日 10:57:54 标签: idea / 破解 / 补丁 / 软件 / 13891 编辑 删除 idea激活,JetBrain旗下软件激活 ...