1. 程式人生 > >C#事件(event)的一個例項

C#事件(event)的一個例項

這個例項來自我們C#老師,是一個雖然簡單但是很全面的例子,程式碼如下:

//做事件程式的一般流程:
//1.定義事件引數類。
//2.定義委託型別。
//1和2一般定義為全域性。

//3.宣告事件。
//3.必須在釋出者中宣告

//4.定義事件的訂閱者類。
//一般是全域性的。並且儘可能考慮通用性。
//即儘可能適用於多個事件

//5.定義 響應 事件的函式。 On開頭的函式。
//6.定義 呼叫 事件函式的 業務邏輯。
//5和6必須在釋出者中實現。

//7.在上層邏輯中,組裝 上述的類。

//訂閱者 ,釋出者。
//釋出者:釋出資訊。所以必須提供一種機制讓訂閱者訂閱。
//事件機制。

//釋出的內容:事件引數類 以及 釋出者本身。

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 class BoliedEventArgs : EventArgs    /*定義事件引數類*/
    {
      public
readonly int temperature; public BoliedEventArgs(int temperature) { this.temperature = temperature; } } public delegate void BoiledEventHandler(Object sender, BoliedEventArgs e); //宣告委託 public event BoiledEventHandler Boiled; //宣告事件 protected virtual void OnBolied
(BoliedEventArgs e) { if(Boiled != null) { //如果有物件註冊 Boiled(this, e); //呼叫所有註冊物件的方法 } } public void BoilWater() { for(int i = 0;i <= 100;i++) { temperature = i; if(temperature > 95) { BoliedEventArgs e = new BoliedEventArgs(temperature); OnBolied(e); //觸發事件。 //被觸發的事件一般是On開頭,後面加事件名稱。 } } } } public class Alarm { public void MakeAlert(Object sender, Heater.BoliedEventArgs e) { Heater heater = (Heater)sender; Console.WriteLine("Alarm:{0} - {1}: ", heater.area, heater.type); Console.WriteLine("Alarm: 嘀嘀嘀,水已經 {0} 度了:\n", e.temperature); } } public class Display { public static void ShowMsg(Object sender, Heater.BoliedEventArgs e) { //靜態方法 Heater heater = (Heater)sender; Console.WriteLine("Display:{0} - {1}: ", heater.area, heater.type); Console.WriteLine("Display:水快燒開了,當前溫度:{0}度。\n", e.temperature); } } class Program { static void Main1() { 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(); } } } //做事件程式的一般流程: //1.定義事件引數類。 //2.定義委託型別。 //1和2一般定義為全域性。 //3.宣告事件。 //3.必須在釋出者中宣告 //4.定義事件的訂閱者類。 //一般是全域性的。並且儘可能考慮通用性。 //即儘可能適用於多個事件 //5.定義 響應 事件的函式。 On開頭的函式。 //6.定義 呼叫 事件函式的 業務邏輯。 //5和6必須在釋出者中實現。 //7.在上層邏輯中,組裝 上述的類。 //訂閱者 ,釋出者。 //釋出者:釋出資訊。所以必須提供一種機制讓訂閱者訂閱。 //事件機制。 //釋出的內容:事件引數類 以及 釋出者本身。

相關推薦

C#事件event一個例項

這個例項來自我們C#老師,是一個雖然簡單但是很全面的例子,程式碼如下: //做事件程式的一般流程: //1.定義事件引數類。 //2.定義委託型別。 //1和2一般定義為全域性。 //3.宣告事件。 //3.必須在釋出者中宣告 //4.定義事件的訂

.Net: C#中的委托Delegate事件Event

一道 中大 每次 summary lang tro 避免 strong lse 委托和事件在 .Net Framework中的應用非常廣泛,然而,較好地理解委托和事件對很多接觸C#時間不長的人來說並不容易。它們就像是一道檻兒,過了這個檻的人,覺得真 是太容易了,而沒有過去的

C++多執行緒同步之事件Event

一、事件(Event)原理解析 1、執行緒同步Event,主要用於執行緒間的等待通知。 2、核心物件中,事件核心物件是個最基本的物件。 3、事件包含一個使用計數(與所有核心物件一樣),一個用於指明該事件是個自動重置的事件還是人工重置的事件的布林值,另一個用

C#的事件Event和代理/委託Delegate例子

還是看例子最直接。 代理(Delegate)例子: delegate void MyDelegate(string str,int index); // 宣告代理 class Test { public static void Show

WEB API----事件event

onf 多個 宋體 sed attach tco document hang 直接   當用戶與Web頁面進行某些交互時,解釋器就會創建相應的event對象以描述事件信息。常見的事件有:用戶點擊頁面上某項內容;鼠標經過特定的元素... Event對象   Event對象代表

MySQL事件Event

原文 1 事件簡介     事件(event)是MySQL在相應的時刻呼叫的過程式資料庫物件。一個事件可呼叫一次,也可週期性的啟動,它由一個特定的執行緒來管理的,也就是所謂的“事件排程器”。     事件和觸發器類似,都是在某些事情發生的時候啟動。當資料庫

TypeScript 總實現自定義事件Event

TypeScript有更好的面向物件性,實現事件只要繼承一個類EventEmitter 定義引發事件 //引入EventEmi

Spring Boot實戰筆記-- Spring常用配置事件Application Event

ans can string code text extends autowired dem plc 一、事件(Application Event)   Spring的事件為Bean和Bean之間的消息通信提供了支持。當一個Bean處理完一個任務之後,希望另一個Bean知道

C++學習筆記——一個字符串分割和統計的工具TextUtils

發生 插入 exit 大小 按行讀取 位置 n) fstream ostream 第一講先從一個實例開始——我們需要完成一個遍歷文件並統計單詞出現次數的任務。分解功能:首先,按行讀取文件並舍棄可能的空行。其次,將每一行都按照空格劃分單詞。因為可能存在標點符號,我們還需要將標

Linux下一個最簡單的不依賴第三庫的的C程式1

如下程式碼是一段彙編程式碼,雖然標題中使用了C語言這個詞語,但下面確實是一段彙編程式碼,弄清楚了這個程式碼,後續的知識點才會展開。 #PURPOSE: Simple program that exits and returns a # status code back to the Lin

Unity用程式給Animator控制的某一個動畫AnimationClip一個動畫事件AnimationEvent

Unity 專案,需要對一個玩家拔武器的動作中,實現武器掛點的切換(從背部 掛到手上)。 1. 一種方案,動畫美術直接編輯動畫,定位到要變化掛點的幀(比如24幀),在Events裡新增一個動畫事件, 名字規範成 TakeWeapon 這個方案 優:讓美術準確控制幀數, 可以個性化

詳解C#委託和事件

  一、當我們使用關鍵字delegate宣告一個自定義委託型別時,實際上是聲明瞭一個該名稱的類型別,繼承自抽象類System.MulticastDelegate,還包含例項方法Invoke、BeginInvoke、EndInvoke:   public delegate void MyDelegate

C#-事件十八

leg mes main 發送 點擊 基本 nta ima 事件處理程序 概述   事件(Event) 基本上說是一個用戶操作,如按鍵、點擊、鼠標移動   使用事件,可以很方便地確定程序執行順序   事件在類中聲明且生成,且通過使用同一個類或其他類中的委托與事件處理程

Qt中的事件處理機制event

Qt事件也就是Qt程式中出現的一系列“事情”,包括對使用者操作做出反應時發出的滑鼠或鍵盤事件等;以及系統內部自動發出的定時器事件等。總之,出現了這些事件後就需要對這些事件進行處理,處理的方法便是“事件處理機制”。 圖1 Qt事件產生 以

Event事件2及Json物件

Event事件(2) 1.事件委託: 把一個事件讓別的元素去做(當為某些元素新增相同的事件時,可以為這些元素的父元素新增該事件)。 優點: ①提高程式的執行效率 ②動態建立的元素新增事件可以在動態建立的函式外面新增事件。 ③冒泡或者捕獲都可以產生事件委託。 &l

WinCE平臺下C#引用APIGDI一個值得警惕的記憶體洩漏

                由於C#精簡框架集繪圖函式不支援圓角矩形,所以引用了相關的API。 [DllImport("//windows//coredll.dll", EntryPoint = "RoundRect")]        private static extern int CeRoundR

C# 中的委託和事件

引言 委託 和 事件在 .Net Framework中的應用非常廣泛,然而,較好地理解委託和事件對很多接觸C#時間不長的人來說並不容易。它們就像是一道檻兒,過了這個檻的人,覺得真是太容易了,而沒有過去的人每次見到委託和事件就覺得心裡別(biè)得慌,混身不自在。本文中,我將通過兩個範例由淺入深地講述什麼

C# 中的委托和事件

per fir 位置 局部變量 意義 不容易 演示 很好 load 引言 委托 和 事件在 .Net Framework中的應用非常廣泛,然而,較好地理解委托和事件對很多接觸C#時間不長的人來說並不容易。它們就像是一道檻兒,過了這個檻的人,覺得真是太容易了,而沒有過去的人每

C++ 基礎使用vs2015封裝c++生成.dll檔案、.lib檔案、.h檔案後,給另一個工程使用:使用前,需配置標頭檔案.h靜態庫.lib和 動態庫.dll 專案屬性

一、簡介 我是一個認真的人,要麼不寫,要麼我就把步驟、截圖、程式碼,一 一 附上,方便大家參考學習。 1、為什麼要生成DLL和lib?      就是為了給VS工程呼叫(比如C#呼叫、C++工程)。 2、C#為什麼要呼叫DLL和lib? C++寫的程

一天練習一個C/C++程式 控制檯版“金山打字”遊戲

今天練習了一個C語言小程式,控制檯版的簡易“金山打字”小遊戲。 效果圖: 程式碼: #include<stdio.h> #include<stdlib.h> #incl