本文描述了如何在C# 中運(yùn)用委托將方法作為參數(shù)。
前言
在學(xué)習(xí)Halcon的過程中給,學(xué)習(xí)了繪制對象綁定事件的方式,它通過將方法作為參數(shù)傳遞進(jìn)去在內(nèi)部實現(xiàn)其功能。 在C#中如何將方法作為參數(shù)傳遞呢,當(dāng)然是用委托。
此案例的基本流程
1、創(chuàng)建一個消息模型MessageModel(MessageEventsModel):作為委托中的參數(shù)。
2、創(chuàng)建一個消息發(fā)送者SqlMessageSender :模擬操作,然后將操作消息發(fā)送出去。
3、創(chuàng)建一個消息接收者M(jìn)essageReceiver:接收發(fā)送者發(fā)送的消息。
4、在程序如何Main中創(chuàng)建發(fā)送者(SqlMessageSender)和接收者(MessageReceiver)對象。
5、將接收方法作為參數(shù)傳入發(fā)送者創(chuàng)建的OnMessageUpdate方法中。
OnMessageUpdate(messageReceiver.MessageReceivedCallback);?
一、預(yù)覽
二、代碼
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 編輯過