C#事件總結與應用

来源:http://www.cnblogs.com/qufeiba/archive/2017/05/24/6901539.html
-Advertisement-
Play Games

C#事件總結與應用 什麼是事件? 事件是特殊化的委托,委托是事件的基礎,所以在介紹事件之前先介紹一下委托 通俗的說就是: 事件就是消息驅動器通過委托類來調用感興趣的方法,事實上事件調用是間接的調用 就像是顯示中我的代理人一樣 發佈者與訂閱者 在學習事件的時候們首先要明白什麼是發佈者什麼是訂閱者: 通 ...


C#事件總結與應用

 

什麼是事件

 

事件是特殊化的委托,委托是事件的基礎,所以在介紹事件之前先介紹一下委托

 

通俗的說就是

事件就是消息驅動器通過委托類來調用感興趣的方法,事實上事件調用是間接的調用  就像是顯示中我的代理人一樣

 

發佈者與訂閱者

在學習事件的時候們首先要明白什麼是發佈者什麼是訂閱者:

通知某件事情發生的,就是發佈者(例如我發佈了微博)

對某件事情關註的,就是訂閱者(例如我關註了微博)

事件觸發和註冊

事件發生時,會通知所有關註該事件的訂閱者(例如我發佈了新的微博)

想在事件發生時被通知,就必須註冊表示關註(例如我關註微博有了新的動態)

事件的聲明

事件的聲明首先要先定義一個委托類 ,因為事件的觸發就是調用一系列訂閱者註冊函數的過程 而委托本身就可以持有多個簽名返回值相同的函數

事件的聲明的關鍵字:event

筆者在這裡寫了一個關於學校上下課的事件

 

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

 

namespace 事件

{

    public delegate void EventHandler(int ringKind);//聲明一個帶參數的委托

    public class ShoolRing //定義一個發佈者類

 

    {

 

        public event EventHandler OnBellSound;//委托發佈

        public void Jow(int ringKind)//實現打鈴操作

        {

            if (ringKind == 1 || ringKind == 2)//判斷打鈴是否合法

            {

                Console.Write(ringKind == 1 ? "上課鈴響了," : "下課鈴響了 ,");

                if (OnBellSound != null)//如果委托事件不等於空則回調委托所定義的方法

                {

 

                    OnBellSound(ringKind);

                }

            }

            else

            {

                Console.WriteLine(" 這個鈴聲參數不正確!");

          

            }

        }

 

 

    }

    public class Studens

    {

       

 

 

        public void ShowJow(int ringKind)//學生方法

        {

            if (ringKind == 1)

            {

                Console.WriteLine("同學們去上課!");

            }

            else if (ringKind == 2)

            {

                Console.WriteLine("同學們課間休息了!");

            }

        }

}

}

class Program

    {

        static void Main(string[] args)

        {

            ShoolRing shool = new ShoolRing();//實例化發佈者類

 

            Studens stu = new Studens();//實例化訂閱者類

            shool.OnBellSound += stu.ShowJow;//訂閱事件

         

 

            shool.Jow(Convert.ToInt32(Console.ReadLine()));

            Console.ReadLine();

     

 

 

 

        }

    }

}

 

 

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • ———————————————————————————————————————————— PWM(脈衝寬度調製) 對模擬信號電平進行數字編碼的方法 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ...
  • Ubuntu目錄 / /bin /sbin /boot /etc /mnt /home d :directory - :file b :block 磁碟以塊進行 l :link Ubuntu許可權 User Group Other r :read w :write x :execute - :none ...
  • xx-net在ubuntu上運行用起來很方便,如果有一些原因必須用CentOS,麻煩就比較大了。 首先需要升級python版本,CentOS自帶的2.6版本是用不了的,必須升級到2.7以上,但是不能用python3,yum可能升不到2.7,所以只能去官網下載源碼編譯安裝。yum本身依賴python, ...
  • 概述 iptables是linux自帶的防火牆軟體,用於配置IPv4數據包過濾或NAT(IPv6用ip6tables)。 在linux上,防火牆其實是系統內核的一部分,基於Netfilter構架,基本原理就是在內核網路層數據包流經的不同位置放置一些鉤子(hook),利用這些嵌入網路層的hook來對數 ...
  • 工作原理見書《51單片機應用及原理——基於KeilC和Proteus,陳海宴》P178-180 ...
  • 《鳥哥的Linux私房菜 (基礎學習篇 第三版)》是頗具知名度的Linux入門書《鳥哥的Linux私房菜:基礎學習篇》的全新版,全面而詳細地介紹了Linux操作系統。 全書分為5個部分:第一部分著重說明Linux的起源及功能,如何規劃和安裝Linux主機;第二部分介紹Linux的文件系統、文件、目錄 ...
  • 前言 ASP.NET Core 的變化和發展速度是飛快的,當你發現你還沒有掌握 ASP.NET Core 1.0 的時候, 2.0 已經快要發佈了,目前 2.0 處於 Preview 1 版本,意味著功能已經基本確定,還沒有學習過 ASP.NET Core 的同學可以直接從 2.0 開始學起,但是如 ...
  • Html 內容 Html就是超文本標記語言的簡寫,是最基礎的網頁語言。 Html是通過標簽來定義的語言,代碼都是由標簽所組成。 Html代碼不用區分大小寫。 Html代碼由<html>開始</html>結束。裡面由頭部分<head></head>和體部分<body></body>兩部分組成。 頭部分 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...