事件的好處~實現(xian)對修改(gai)的封閉(bi),對擴展的開放!~續
本文章主要(yao)以上一篇文件的(de)代碼在寫法上進行一個優化,更(geng)(geng)代碼更(geng)(geng)精簡,更(geng)(geng)能發(fa)揮.net 3.5為我們(men)提供的(de)已有功能,呵呵!
首先,為了(le)只有返(fan)回值的(de)委托(tuo)來說,我們是不用再去定義它的(de),完(wan)成可以(yi)用.net提供(gong)的(de)Func<T>這個委托(tuo)來實現
同時,這個(ge)委(wei)托(tuo)也(ye)支付多個(ge)輸入參數的(de)(de)情況,和Func<>對應的(de)(de)一個(ge)委(wei)托(tuo)叫(jiao)Action<>,它沒有(you)返回值,可(ke)以由多個(ge)輸入參數,下(xia)面是對Func<> 委(wei)托(tuo)的(de)(de)使(shi)用(yong)實例,同樣使(shi)用(yong)上一篇文(wen)章作(zuo)為例子(zi)
public class ReturnMessage
{
public static event Func<string> ReturnMsg;
public static string OnReturnMsg()
{
if (ReturnMsg != null)
return ReturnMsg();
else
return "默認字符";
}
}
我們看到了,代碼(ma)比上(shang)一篇文(wen)章精簡(jian)了一些,在訂(ding)閱(yue)事件(jian)時,同樣(yang)可以使用(yong)匿名方法(fa)來實現
ReturnMessage.ReturnMsg += delegate() { return "OK"; }; //不要以為(wei)(wei)這(zhe)樣省(sheng)內存空間,它只是代碼(ma)上(shang)(shang)精(jing)簡了,事實上(shang)(shang)系統為(wei)(wei)我們自動建立了一(yi)個(ge)方法
在(zai)觸(chu)發時,和上(shang)一篇(pian)文件沒(mei)有區別,在(zai)這(zhe)里就不列舉代碼(ma)了。
再把Action<>委托(tuo)的例子寫上(shang),代(dai)大家參(can)考
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("去新浪吧(ba)"); };
觸發方法:
ReturnMessage.OnRedirectUrl();
這樣就是我滿意的結果了,呵(he)(he)呵(he)(he)!自(zi)己可以根據業務要(yao)求去寫(xie)重定義的頁(ye)面(mian)地址,呵(he)(he)呵(he)(he)。