首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C# 基礎概念:事件 模式與自定義事件實作完整指南

     編輯:關於C語言

事件本質:觀察者模式

事件封裝「發生某事並通知關注者」的模式。事件源 引發事件,事件監聽者 訂閱並處理。

WinForms 按鈕 Click 事件範例

// 設計器生成的訂閱代碼
this.button1.Click += new System.EventHandler(this.button1_Click);

// 事件處理方法
private void button1_Click(object sender, EventArgs e) {
    // sender 為事件源,e 為事件參數
}

EventHandler 為委托類型,定義事件處理簽名。

自定義事件四步驟

  1. 事件源定義事件:public event EventHandler myevent;
  2. 監聽者訂閱:this.myevent += new EventHandler(MyEventHandler);
  3. 監聽者實現處理器:private void MyEventHandler(object sender, EventArgs e) { ... }
  4. 事件源引發:if (myevent != null) myevent(this, new EventArgs());(需檢查 null 防止無訂閱者時拋出異常)。

完整自定義事件範例 (Form1)

public partial class Form1 : Form {
    public event EventHandler myevnet;
    public Form1() {
        InitializeComponent();
        this.myevnet += new EventHandler(MyEventHandler);
    }
    private void button1_Click(object sender, EventArgs e) {
        MessageBox.Show("button1_Click");
        if (myevnet != null) myevnet(this.button1, new EventArgs());
    }
    private void MyEventHandler(object sender, EventArgs e) {
        MessageBox.Show("myevent is raised.......");
    }
}

進階:自定義事件參數

  1. 繼承 EventArgs 定義 MyEventArgs,加入 Message 屬性。
  2. 定義專用委托 delegate void MyeventHandler(object sender, MyEventArgs e);。
  3. 事件源聲明 public event MyeventHandler myCustomevent;。
  4. 引發時傳遞自定義參數:myCustomevent(this, new MyEventArgs { Message = this.textBox1.Text });。
  5. 監聽者訂閱並處理:addGrad.myCustomevent += new MyeventHandler(addGrad_myCustomevent);,處理器中取得 e.Message。

關鍵點總結

  • 事件基於委托,提供發布/訂閱機制。
  • 引發前必須檢查 null(或使用 C# 6 ?.Invoke())。
  • 自定義 EventArgs 可攜帶豐富上下文資訊。
  • 命名慣例:事件名用動詞或動詞短語,委托以 EventHandler 結尾,參數類以 EventArgs 結尾。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved