iT邦幫忙

2023 iThome 鐵人賽

DAY 10
0
Software Development

C# 學習之路系列 第 11

[DAY10] C#基礎與實作(委派. 事件)

  • 分享至 

  • xImage
  •  

C# 程式基礎

委派:用於定義和引用方法。
事件:允許一個對象通知其他對象發生了特定的動作。

委派(Delegate):

  • 委派是一種類型,它代表對方法的引用。可以用於將方法作為參數傳遞給其他方法,或者用於定義和訪問委派的方法。

  • 定義:可以使用 delegate 關鍵字定義委派,指定方法的簽名(返回類型和參數列表)

  • 委派的實例化和使用:可以實例化委派並將方法指派給它。然後,可以使用委派來調用這個方法,就好像直接調用方法一樣。

  • 程式範例(使用委派實現簡單的計算器):

    // 定義一個委派,該委派可以接受兩個整數並返回整數
    delegate int CalculatorDelegate(int x, int y);
    
    class Program
    {
        static int Add(int a, int b)
        {
            return a + b;
        }
    
        static int Subtract(int a, int b)
        {
            return a - b;
        }
    
        static void Main()
        {
            // 創建委派實例,並將方法指派給它
            CalculatorDelegate addDelegate = Add;
            CalculatorDelegate subtractDelegate = Subtract;
    
            int result1 = addDelegate(5, 3);       // 調用 Add 方法
            int result2 = subtractDelegate(8, 2);  // 調用 Subtract 方法
    
            Console.WriteLine("加法結果:" + result1);
            Console.WriteLine("減法結果:" + result2);
        }
    }```
    
    
    

事件(Event):

  • 事件是一種機制,用於通知一個對象(發布者)的狀態或動作已經發生,以便其他對象(訂閱者)可以對此事件做出響應。

  • 可以使用 event 關鍵字定義事件,通常在類別中聲明事件。

  • 事件的訂閱和解除訂閱:對象可以訂閱事件,以便在事件觸發時執行相應的處理程序。還可以解除對事件的訂閱。

  • 程式範例(使用事件實現簡單的鬧鐘):

    // 定義鬧鐘類別
    class AlarmClock
    {
        // 定義事件
        public event EventHandler Alarm;
    
        // 模擬鬧鐘觸發事件
        public void TriggerAlarm()
        {
            Console.WriteLine("鬧鐘響了!");
            OnAlarm(); // 觸發事件
        }
    
        // 處理事件的方法
        protected virtual void OnAlarm()
        {
            Alarm?.Invoke(this, EventArgs.Empty);
        }
    }
    
    class Program
    {
        static void Main()
        {
            AlarmClock clock = new AlarmClock();
    
            // 訂閱事件,指定處理程序
            clock.Alarm += (sender, e) =>
            {
                Console.WriteLine("時間到了,該起床了!");
            };
    
            // 模擬鬧鐘觸發
            clock.TriggerAlarm();
        }
    }```
    
    

在此範例中,我們定義了一個 AlarmClock 類別,其中包含一個事件 Alarm。當鬧鐘觸發時,我們使用 OnAlarm 方法來觸發事件。然後,我們在 Main 函式中訂閱了該事件,並指定了事件處理程序。當鬧鐘觸發時,事件處理程序會執行,顯示消息。

這個範例展示了如何使用事件機制實現簡單的鬧鐘,
鬧鐘:事件的發布者。
事件處理程序:事件的訂閱者。
當鬧鐘觸發時訂閱者會收到通知並執行相應的處理程序。

程式實作練習:

參考來源

  1. ChatGPT
  2. C#最強入門邁向頂尖高手之路王者歸來
  3. w3schools C#
  4. 使用委派 (C# 程式設計手冊)
  5. rextester compile c# online

心情小抒發

到今天已經是第10天了,鐵人賽旅程的三分之一
以前看看大佬們寫文章的時候,都是十分嚮往
自己來寫的時候,才知道是壓力與時間並排的,
常常在想自己書寫的時候跟 一般閱讀書籍的差別性
是不是沒有什麼差別? 我的文章真的能幫的到人嗎?
想要挑戰自我,但是自己寫的會做的真的好嗎?
可能是第一次自我的挑戰,也應該是自己準備的不夠充足
想要為自己求進步 而報名的鐵人賽,但自己好像報錯組了
應該比較像是 自我挑戰/images/emoticon/emoticon06.gif
雖然沒有大佬們的文章精闢,但我期望自己力求進步
努力堅持30天,並在一次一次的學習中,新增與修改自己未來與過去的文章
期望自己的發文可以以更好的型態流傳給之後看到的每一個人
或許之後的人看到的每天的版本會有稍微的不一樣
這可能是我覺得哪邊缺少了 或希望改變什麼修正的
不論好壞,也期望其他人可以給予我建議
讓我不斷進步前進下去
今天是第十天,三分之一的路程

期望挑戰30天持續更新成功 ~ DAY10

/images/emoticon/emoticon07.gif


上一篇
[DAY9] C#基礎與實作(Dictionary)
下一篇
[DAY11] C#基礎與實作(錯誤/例外處理)
系列文
C# 學習之路31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言