- 浏览: 159129 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
北极的。鱼:
几个常用的CSS效果:1.色块透明,文字不透明:设置色块的rg ...
网页前端的浏览器兼容 -
北极的。鱼:
数字证书的作用就是用来说明,里面的公钥是谁的。
数字签名 -
北极的。鱼:
数字证书的作用,其实就是证明,证书里包含的公钥是哪个人的。
数字签名 -
北极的。鱼:
面试题,类似冒泡排序把一个字符串的大写字母放到字符串的后面,各 ...
【转】冒泡排序 -
北极的。鱼:
另一种简单桶排序实现:
using System;
using ...
【转】桶排序(Bucket Sort)
using System; using System.Collections.Generic; using System.Text; namespace Delegate { // 热水器 public class Heater { private int temperature; public string type = "RealFire"; // 添加型号作为演示 public string area = "China"; // 添加产地作为演示 //声明委托 public delegate void BoiledEventHandler(Object sender, BoiledEventArgs e); public event BoiledEventHandler Boiled; //声明事件 // 定义BoiledEventArgs类,传递给Observer所感兴趣的信息 public class BoiledEventArgs : EventArgs { public readonly int temperature; public BoiledEventArgs(int temperature) { this.temperature = temperature; } } // 可以供继承自 Heater 的类重写,以便继承类拒绝其他对象对它的监视 protected virtual void OnBoiled(BoiledEventArgs e) { if (Boiled != null) { // 如果有对象注册 Boiled(this, e); // 调用所有注册对象的方法 } } // 烧水。 public void BoilWater() { for (int i = 0; i <= 100; i++) { temperature = i; if (temperature > 95) { //建立BoliedEventArgs 对象。 BoiledEventArgs e = new BoiledEventArgs(temperature); OnBoiled(e); // 调用 OnBolied方法 } } } } // 警报器 public class Alarm { public void MakeAlert(Object sender, Heater.BoiledEventArgs e) { Heater heater = (Heater)sender; //这里是不是很熟悉呢? //访问 sender 中的公共字段 Console.WriteLine("Alarm:{0} - {1}", heater.area, heater.type); Console.WriteLine("Alarm:嘀嘀嘀,水已经 {0} 度了:", e.temperature); Console.WriteLine(); } } // 显示器 public class Display { public static void ShowMsg(Object sender, Heater.BoiledEventArgs e) { //静态方法 Heater heater = (Heater)sender; Console.WriteLine("Display:{0} - {1}:", heater.area, heater.type); Console.WriteLine("Display:水快烧开了,当前温度:{0}度。", e.temperature); Console.WriteLine(); } } class Program { static void Main() { Heater heater = new Heater(); Alarm alarm = new Alarm(); heater.Boiled += alarm.MakeAlert; //注册方法 heater.Boiled += (new Alarm()).MakeAlert; //给匿名对象注册方法 heater.Boiled += new Heater.BoiledEventHandler(alarm.MakeAlert); //也可以这么注册 heater.Boiled += Display.ShowMsg; //注册静态方法 heater.BoilWater(); //烧水,会自动调用注册过对象的方法 Console.ReadKey(); } } }
很简单的事件例子,方便大家理解。
备:其实大家理解事件定义,可以理解为封装一个委托对象。
这里。BoiledEventHandler其实是一个事件订阅列表。Boiled其实是前者的一个对象,我们可以看到在热水器类(Heater)里面是用public event BoiledEventHandler Boiled;来声明了事件对象,没有实例化。在订阅者类中才用+=操作符实例化的。所以为什么在事件源类【这里是热水器类(Heater)】中触发事件前要先判断下这个事件是否为空
(见我红色标注出来的代码)。如果不为空才触发事件。所以如果你把订阅者中的订阅事件处理方法(见我蓝色标注的地方)注释掉。那么在事件源中事件对象就为NULL了,就不会触发事件了。
各位可以这么理解:纯属本人为了帮助理解的,如果错了,别拍我哈!
BoiledEventHandler是一个数组列表,Boiled就是他们里面的一个元素。你要操作Boiled的话,必须要实例化Boiled才能操作。这里的实例话就是你说的注册这个事件实例化。
发表评论
-
【转】.NET老程序员推荐的7个开发类工具
2016-02-01 18:27 608很幸运工作以来一直是.NET + SQL Server 的开 ... -
【转】LAMDA表达式学习
2015-07-27 01:48 688转自: http://www.cnblogs.com/Tey ... -
深入.NET托管堆(managed heap)
2014-12-28 17:26 898转自http://blog.sina.com.cn/s/b ... -
C#中关于托管资源和非托管资源
2014-12-28 15:16 535转自百度文库 下面说一下在C#中使用托管资源和非托 ... -
[转]net GC
2014-09-17 22:02 581转自:http://blog.csdn.net/sykpb ... -
C#技术漫谈之垃圾回收机制(GC)
2014-07-22 00:15 850转自:http://kb.cnblogs.com/page ... -
Lambda表达式的前世今生
2014-07-10 22:58 739转自: http://www.cnblogs.com/Oce ... -
Net托管世界的应用程序域和线程
2014-05-17 01:41 1254转载:http://www.360doc.com/conte ... -
后台用C#发起HttpWeb请求
2014-09-17 22:03 783public static string HttpPost ... -
silverlight中的控件pivotviewer。
2012-02-17 17:33 1487最近的一个项目需要用到silverlight中的控件pivot ... -
【转】C#XML读写
2011-08-16 09:07 866一.前言: XML是微软.Net战略的一个重要组成部分,而 ... -
【转】盗链问题
2011-07-08 11:18 1078盗链 的危害我就不说了,网上有很多。 直接分析盗链原理 ... -
【转】C#-ADO.Net连接池和连接字符串剖析
2011-06-01 15:48 1980连接到数据库服务器通 ... -
【转】C# Sql连接池
2011-06-01 14:35 1713使用连接池 连接到数 ... -
【转】C#实现连接池
2011-06-01 11:04 2553转自:http://www.cnblogs.com ... -
关于C#中的特性小例子
2011-05-26 14:37 1029最近要写一个网络报表。 众所周知,网络报表是程序员的一大噩梦 ... -
【转】const 与 readonly知多少
2011-05-23 10:25 897转自:http://www.cnblogs.c ... -
【转】Message Queue(微软消息队列)
2011-05-20 11:52 933Message Queue(微软消息队列) Mes ... -
C#解析Json的类
2011-04-13 16:53 1566网上转的,自己没测试过。大家有好的方法请跟帖共享,最好是要自己 ... -
c#获得元数据转JSON数据格式
2011-04-13 16:50 1220代码经过测试(非本人),看官有更好的后台数据转JSON的方法请 ...
相关推荐
在这个例子中,`Publisher`类发布`MyEvent`事件,而`Subscriber`类订阅这个事件并提供处理方法。 总结,C#的委托和事件是实现异步编程和事件驱动编程的核心机制。通过委托,我们可以创建灵活的回调功能;通过异步...
在这个例子中,`RaiseCustomEvent`方法可以由用户调用来触发自定义事件,同时传递自定义的事件参数。其他类可以订阅`CustomEvent`,并在事件发生时接收到包含`Message`的`CustomEventArgs`对象。 总结,C#的自定义...
这个“简单的C#事件使用DEMO”是一个很好的起点,帮助初学者理解事件的工作原理和如何在实践中应用。下面将详细解释相关知识点。 1. **事件的概念**: 事件是类的成员,它表示特定状态的改变或操作的发生。事件的...
这是C# 委托与事件简单的使用例子。 只是为了初学者更好的接受委托与事件使用方法而已。 程序有两个窗体,一个是主窗体,一个是副窗体。 打开主窗体,在主窗体中点按钮后,打开副窗体,在副窗体中,可以调整主窗体...
在这个例子中,`Publisher`类发布`MyEvent`事件,而`Subscriber`类订阅这个事件。当`Publisher`调用`RaiseEvent`时,所有订阅了该事件的`Subscriber`对象的`OnMyEvent`方法都会被调用。 为了确保良好的设计,C#遵循...
本文将深入探讨C#中的事件和委托,并通过一个简单的实例来阐述它们的工作原理。 首先,我们需要了解什么是委托。在C#中,委托可以看作是一种类型安全的函数指针,它允许我们传递方法作为参数或存储方法以备后用。...
本篇将围绕"C#串口简单例子"这个主题,详细介绍如何在C#中实现串口通信,以及相关的编程知识。 首先,我们了解下串口通信的基本概念。串口通信是指数据以串行方式按位发送和接收,通常包括标准的RS-232、USB转串口...
下面是一个简单的事件声明示例: ```csharp public event EventHandler<MyEventArgs> DocumentChanged; ``` 在这里,`EventHandler<T>` 是预定义的事件处理程序类型,`MyEventArgs` 是自定义的事件参数类,继承自 ...
在C# WinForm开发中,用户界面交互是一个关键部分,其中单击(Click)和双击(DoubleClick)事件是常见的用户输入响应。然而,标题提到的一个常见问题是:在同一个控件上,C# WinForm不支持同时处理单击和双击事件。...
5. **委托与事件**:C#的委托和事件机制使得异步编程变得简单。委托是类型安全的函数指针,而事件则是实现观察者模式的一种方式。在UI编程中,它们尤为重要。 6. **泛型**:泛型提供了一种方式,可以在不指定特定...
标题"160多个C# WinForm简单小例子"表明这是一份包含大量示例代码的资源集合,旨在帮助初学者快速理解和掌握C# WinForm编程的基本概念和技巧。 描述中提到,这些小例子"有的只是几行代码",这表明它们设计得非常...
下面是一个简单的C#事件示例: ```csharp using System; // 发布者类 public class Publisher { // 定义事件,使用EventHandler委托 public event EventHandler MyEvent; // 触发事件的方法 public void ...
在"ConsoleApplicationEventTest"这个例子中,我们将看到一个简单的弱事件实现,它通过控制台应用程序演示了弱事件的工作流程。以下是这个实例可能涉及的关键知识点: 1. **事件发布者(Publisher)**:发布者是...
这个"100个C#实例程序例子 源码"的压缩包,显然是为了帮助新手快速入门C#编程而准备的。以下是这些实例可能涵盖的一些关键知识点: 1. **基础语法**:C#的基本语法结构,包括变量声明、数据类型(如int、string、...
C#是一种广泛应用于软件开发,尤其是Windows...这个压缩包中的代码例子涵盖了这些基本概念,并可能包含更具体的用法,如LINQ查询、异步编程、事件处理等。通过实践这些例子,你将能深入理解C#的基础类并提升编程能力。
标题“51个C#小程序例子”表明这是一份包含多个示例项目的资源,旨在帮助学习者通过实践来深化对C#的理解。描述中的“输出图形”和“实时获取CPU使用率”提到了两个具体的示例类型,一个是图形绘制,另一个是系统...
下面是一个简单的事件分发示例: ```csharp public class EventPublisher { // 声明事件,类型为EventHandler,它是一个内置的多播委托,用于处理事件 public event EventHandler MyEvent; // 触发事件的方法 ...
在C#编程语言中,事件(Event)是...通过这个实例,你可以学习到C#事件的核心概念,包括如何声明事件、如何触发事件以及如何订阅和取消订阅事件。这将有助于你在实际项目中更好地利用事件进行组件间的通信和状态管理。
在C#编程中,委托、线程和事件是三个核心概念,它们对于构建高效、响应式的多任务应用程序至关重要。下面将详细阐述这三个概念及其相互之间的关系,并通过一个实例代码进行说明。 1. 委托(Delegate): 委托在C#中...
1. 基本语法:这50个例子涵盖了C#的基础语法,包括变量声明、数据类型(如int、string、bool等)、运算符(算术、比较、逻辑等)、流程控制(if-else、switch、for、while等)。 2. 函数与方法:通过实例,你可以...