【C#】Delegate and Events

如果我们把方法作为参数传递给方法,就会用到委托~

委托大致有三个步骤~

第一是委托宣告 ~ 第二是方法塞入 ~ 第三是委托调用 ~

那我们来看委托是如何被实现的吧 ~


学习目标: Delegate and Events的概念

学习难度: ☆☆☆


using System;

namespace ConsoleApp1
{
    class MainProgram
    {
        public delegate void Project(string name); //委托宣告

        static void GameFactory1(string name)
        {
            Console.WriteLine(name + "made by GameFactory1");
        }

        static void GameFactory2(string name)
        {
            Console.WriteLine(name + "made by GameFactory2");
        }

        static void Main(string[] args)
        {
            //方法塞入委派

            Project task1 = new Project(GameFactory1);

            //方法塞入委派

            Project task2 = GameFactory2;

            //方法塞入委派

            Project task3 = (string name) => Console.WriteLine(name + "made by students");

            task1("car game"); //调用委派

            task1("gun game"); //调用委派

            task1("RPG game"); //调用委派
        }
    }
}

接着来看到事件~ 事件是一个对象发送的通知~ 表示发生一个动作~

事件方送通知後~ 委派会去执行它的任务~

那我们来看事件是如何被实现的吧 ~


using System;

namespace ConsoleApp1
{
    public delegate void Project(string name);  // 专案委派

    public class ProjectEvent
    {
        public event Project NewProject; // 专案事件

        public void ProjectStart(string name) // 专案介绍
        {
            Console.WriteLine("Project name is" + " " + name);

            ProjectState(name); // 专案状态
        }

        protected virtual void ProjectState(string name) //protected virtual method
        {
            //if NewProject is Game then call delegate

            if (name == "Game")
            {
                NewProject.Invoke(name); //呼叫委派
            }
            else
            {
                Console.WriteLine("Project is not a game !");
            }
        }
    }

    class MainProgram
    {
        // event handler
        
        public static void ProjectState(string name)
        {
            Console.WriteLine($"{name} Project is Active !");
        }

        public static void Main()
        {
            ProjectEvent project = new ProjectEvent();

            project.NewProject += ProjectState; //注册事件

            project.ProjectStart("Game");  //启动游戏专案

            project.ProjectStart("DataBase"); //启动资料库专案
        }
    }
}

参考资料:

https://www.tutorialsteacher.com/csharp/csharp-delegates

https://www.tutorialsteacher.com/csharp/csharp-event

https://ithelp.ithome.com.tw/articles/10228906


<<:  【C#】Struct vs Class

>>:  SQL insert小技巧(使用SQL Sever/Go)

Re: 新手让网页 act 起来: Day17 - 探索 useEffect

昨天介实作一个阳春的 useState ,今天来换 useEffect 吧!透过实作来帮助我们以後在...

基本操作 - 下单

建立订单 from shioaji.constant import * # 股票 order = ...

Leetcode 挑战 Day 14 [169. Majority Element]

169. Majority Element 今天我们一起挑战leetcode第169题Majorit...

[DAY08] 部署用 Designer 做好的 Pipiline 到 Web API

DAY08 部署用 Designer 做好的 Pipeline 到 Web API 昨天我们用 De...

Flutter基础介绍与实作-Day29 旅游笔记的实作(10)

今天要写的是隐藏式选单的第三个"登出"的选项,原本这格写的是使用说明,後来想想好...