事件的好处~实现对修改的封闭,对扩展的开放!~续
本文章主要以上一篇文件的代码在写法上进行一个优化,更代码更精简,更能发挥.net 3.5为我们提供的已有功能,呵呵!
首先,为了只有返回值的委托来说,我们是不用再去定义它的,完成可以用.net提供的Func<T>这个委托来实现
同时,这个委托也支付多个输入参数的情况,和Func<>对应的一个委托叫Action<>,它没有返回值,可以由多个输入参数,下面是对Func<> 委托的使用实例,同样使用上一篇文章作为例子
public class ReturnMessage
{
public static event Func<string> ReturnMsg;
public static string OnReturnMsg()
{
if (ReturnMsg != null)
return ReturnMsg();
else
return "默认字符";
}
}
我们看到了,代码比上一篇文章精简了一些,在订阅事件时,同样可以使用匿名方法来实现
ReturnMessage.ReturnMsg += delegate() { return "OK"; }; //不要以为这样省内存空间,它只是代码上精简了,事实上系统为我们自动建立了一个方法
在触发时,和上一篇文件没有区别,在这里就不列举代码了。
再把Action<>委托的例子写上,代大家参考
public class ReturnMessage
{
/// <summary>
/// 返回消息事件
/// </summary>
public static event Func<string> ReturnMsg;
/// <summary>
/// 重定向事件
/// </summary>
public static event Action RedirectUrl;
/// <summary>
/// 触发ReturnMsg事件
/// </summary>
/// <returns></returns>
public static string OnReturnMsg()
{
if (ReturnMsg != null)
return ReturnMsg();
else
return "默认字符";
}
/// <summary>
/// 触发OnRedirectUrl事件
/// </summary>
public static void OnRedirectUrl()
{
if (RedirectUrl != null)
RedirectUrl();
}
}
调用方法:
ReturnMessage.RedirectUrl += delegate() { Console.WriteLine("去新浪吧"); };
触发方法:
ReturnMessage.OnRedirectUrl();
这样就是我满意的结果了,呵呵!自己可以根据业务要求去写重定义的页面地址,呵呵。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示