using System;
public class Program
{
public static void Main()
{
// 創建一個計算器對象
Calculator calculator = new Calculator();
// 訂閱事件
calculator.Calculated += OnCalculated;
// 計算並觸發事件
calculator.Calculate(10, 5);
}
// 定義事件處理程序
private static void OnCalculated(object sender, CalculationEventArgs e)
{
Console.WriteLine($"計算結果:{e.Result}");
}
}
// 自定義委託類型
public delegate void CalculationEventHandler(object sender, CalculationEventArgs e);
// 定義事件參數類型
public class CalculationEventArgs : EventArgs
{
public int Result { get; set; }
}
// 定義計算器類
public class Calculator
{
// 定義事件
public event CalculationEventHandler Calculated;
// 計算方法
public void Calculate(int num1, int num2)
{
// 執行計算
int result = num1 + num2;
// 觸發事件
if (Calculated != null)
{
CalculationEventArgs args = new CalculationEventArgs();
args.Result = result;
Calculated(this, args);
}
}
}
在這個例子中,我們首先定義了一個自定義委託類型CalculationEventHandler和一個事件參數類型CalculationEventArgs。然後,我們創建了一個Calculator類,它定義了一個Calculated事件和一個Calculate方法。在Calculate方法中,我們執行了一個簡單的加法計算,然後通過觸發Calculated事件來通知其他對象。在主函數中,我們創建了一個Calculator對象並訂閱了Calculated事件,然後執行了一個計算。當事件被觸發時,事件處理程序就會被調用並輸出計算結果。
需要注意的是,在觸發事件之前,我們先判斷了事件是否為空,這是一種好的習慣。如果沒有這個判斷,當沒有訂閱事件時,事件可能會為空,導致空引用異常。