首页 > .Net Framework中的委托与事件

.Net Framework中的委托与事件

using System;
using System.Collections.Generic;
using System.Text;namespace Delegate {// 热水器public class Heater {private int temperature;public string type = "RealFire 001";       // 添加型号作为演示public string area = "China Xian";         // 添加产地作为演示//声明委托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) {//建立BoiledEventArgs 对象。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();   //烧水,会自动调用注册过对象的方法
       }}
}输出为:
Alarm:China Xian - RealFire 001:
Alarm: 嘀嘀嘀,水已经 96 度了:
Alarm:China Xian - RealFire 001:
Alarm: 嘀嘀嘀,水已经 96 度了:
Alarm:China Xian - RealFire 001:
Alarm: 嘀嘀嘀,水已经 96 度了:
Display:China Xian - RealFire 001:
Display:水快烧开了,当前温度:96度。
// 省略 ...

  //一个数的规则如下:1,1,2,3,5,8,13,21,34,.......求第30位数是多少,用递归算法实现。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;namespace ConsoleApplication1
{//一个数的规则如下:1,1,2,3,5,8,13,21,34,.......求第30位数是多少,用递归算法实现。public class MainClass{public static void Main(){Console.WriteLine(Foo(30));Console.ReadKey();}public static int Foo(int i){if (i <= 0)return 0;else if (i > 0 && i <= 2)return 1;else return Foo(i - 1) + Foo(i - 2);}}
}

 

转载于:https://www.cnblogs.com/ruishuang208/p/3323300.html

更多相关:

  • 在.Net Framework中,配置文件一般采用的是XML格式的,.NET Framework提供了专门的ConfigurationManager来读取配置文件的内容,.net core中推荐使用json格式的配置文件,那么在.net core中该如何读取json文件呢?1、在Startup类中读取json配置文件1、使用Confi...

  •   1 public class FrameSubject extends JFrame {   2    3   …………..   4    5   //因为无法使用多重继承,这儿就只能使用对象组合的方式来引入一个   6    7   //java.util.Observerable对象了。   8    9   DateSub...

  • 本案例主要说明如何使用NSwag 工具使用桌面工具快速生成c# 客户端代码、快速的访问Web Api。 NSwagStudio 下载地址 比较强大、可以生成TypeScript、WebApi Controller、CSharp Client  1、运行WebApi项目  URL http://yourserver/swagger 然后...

  •   在绑定完Action的所有参数后,WebAPI并不会马上执行该方法,而要对参数进行验证,以保证输入的合法性.   ModelState 在ApiController中一个ModelState属性用来获取参数验证结果.   public abstract class ApiController : IHttpController,...

  • 1# 引用  C:AVEVAMarineOH12.1.SP4Aveva.ApplicationFramework.dll C:AVEVAMarineOH12.1.SP4Aveva.ApplicationFramework.Presentation.dll 2# 引用命名空间, using Aveva.Applicati...