C#委托运用-将方法作为参数
|
admin
2025年4月19日 14:54
本文热度 47
|
前言
在学习Halcon的过程中给,学习了绘制对象绑定事件的方式,它通过将方法作为参数传递进去在内部实现其功能。 在C#中如何将方法作为参数传递呢,当然是用委托。
此案例的基本流程
1、创建一个消息模型MessageModel(MessageEventsModel):作为委托中的参数。
2、创建一个消息发送者SqlMessageSender :模拟操作,然后将操作消息发送出去。
3、创建一个消息接收者MessageReceiver:接收发送者发送的消息。
4、在程序如何Main中创建发送者(SqlMessageSender)和接收者(MessageReceiver)对象。
5、将接收方法作为参数传入发送者创建的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 消息发布者
public class SqlMessageSender
{
private MessaegeUpdateCallbackClass InternalFunc;
public void OnMessageUpdate(MessaegeUpdateCallbackClass func)
{
InternalFunc = func;
func?.Invoke(new MessageEventsModel(MessageLevel.Info, $"回调方法传递"));
}
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, $"执行:{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 编辑过