本文描述了如何在C# 中運用委托將方法作為參數(shù)。
前言
在學習Halcon的過程中給,學習了繪制對象綁定事件的方式,它通過將方法作為參數(shù)傳遞進去在內(nèi)部實現(xiàn)其功能。 在C#中如何將方法作為參數(shù)傳遞呢,當然是用委托。
此案例的基本流程
1、創(chuàng)建一個消息模型MessageModel(MessageEventsModel):作為委托中的參數(shù)。
2、創(chuàng)建一個消息發(fā)送者SqlMessageSender :模擬操作,然后將操作消息發(fā)送出去。
3、創(chuàng)建一個消息接收者MessageReceiver:接收發(fā)送者發(fā)送的消息。
4、在程序如何Main中創(chuàng)建發(fā)送者(SqlMessageSender)和接收者(MessageReceiver)對象。
5、將接收方法作為參數(shù)傳入發(fā)送者創(chuàng)建的OnMessageUpdate方法中。
OnMessageUpdate(messageReceiver.MessageReceivedCallback);?
一、預覽
二、代碼
internal static class Program{ static void Main() { SqlMessageSender sqlMessageSender = new SqlMessageSender(); MessageReceiver messageReceiver = new MessageReceiver(); sqlMessageSender.OnMessageUpdate(messageReceiver.MessageReceivedCallback); sqlMessageSender.Add(); sqlMessageSender.Delete(); sqlMessageSender.Update(); sqlMessageSender.Query(); }}#region 消息接收者public class MessageReceiver{ public void MessageReceivedCallback(MessageEventsModel messageModel) { Console.WriteLine($"【{this.GetType().Name}】=>接收到消息【{messageModel.Message},消息等級:{messageModel.Level}】"); }}#endregion#region 消息發(fā)布者public class SqlMessageSender{ private MessaegeUpdateCallbackClass InternalFunc; public void OnMessageUpdate(MessaegeUpdateCallbackClass func) { InternalFunc = func; func?.Invoke(new MessageEventsModel(MessageLevel.Info, $"回調(diào)方法傳遞")); } public void Add() { OnFunc("添加"); } public void Delete() { OnFunc("刪除"); } public void Update() { OnFunc("修改"); } public void Query() { OnFunc("查詢"); } private void OnFunc(string message) { InternalFunc?.Invoke(new MessageEventsModel(MessageLevel.Info, $"執(zhí)行:{message} ")); }}#endregion#region 消息public delegate void MessaegeUpdateCallbackClass(MessageEventsModel MessageModel);
public class MessageEventsModel{ public string Message { get; set; } public MessageLevel Level { get; set; } public MessageEventsModel(MessageLevel level, string message) { Level = level; Message = message; }}public enum MessageLevel{ None = 0, Info, Warning, Error, Fatal,}#endregion
作者:編程筆記in
出處:blog.csdn.net/weixin_43626218/article/details/141433450
該文章在 2025/4/19 14:54:46 編輯過