如果我们把方法作为参数传递给方法,就会用到委托~
委托大致有三个步骤~
第一是委托宣告 ~ 第二是方法塞入 ~ 第三是委托调用 ~
那我们来看委托是如何被实现的吧 ~
学习目标: 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
>>: SQL insert小技巧(使用SQL Sever/Go)
昨天介实作一个阳春的 useState ,今天来换 useEffect 吧!透过实作来帮助我们以後在...
建立订单 from shioaji.constant import * # 股票 order = ...
169. Majority Element 今天我们一起挑战leetcode第169题Majorit...
DAY08 部署用 Designer 做好的 Pipeline 到 Web API 昨天我们用 De...
今天要写的是隐藏式选单的第三个"登出"的选项,原本这格写的是使用说明,後来想想好...