一個C#委託的樣本

來源:互聯網
上載者:User
  public delegate void MsgDelgate(string sMsg);
    protected void Page_Load(object sender, EventArgs e)
    {
        MsgDelgate MsgDelgate1 = new MsgDelgate(SayHello);
        MsgDelgate1 += MsgOut;
        DoSomething(2, 5, MsgDelgate1);
    }
    protected void DoSomething(int iCount1, int iCount2, MsgDelgate notice)
    {
        notice("I am good at figures:" + iCount1.ToString() + "+" + iCount2.ToString() + "=" + (iCount1 + iCount2));
    }
    private void MsgOut(string sMsg)
    {

        PlaceHolderMsg.Controls.Add(new LiteralControl("<span style=\"color:red;\">"+sMsg+"</span>"));
    }
    private void SayHello(string sHello)
    {
        sHello = sHello==null ? sHello : "Hello,My Delegate.<br />";
        PlaceHolderMsg.Controls.Add(new LiteralControl("<span style=\"color:#036;\">" + sHello + "</span>"));
    }

頁面中只含有一個PlaceHolder

<asp:PlaceHolder ID="PlaceHolderMsg" runat="server"></asp:PlaceHolder>

 

為什麼會輸出這個結果:

MsgDelgate MsgDelegate1 = new MsgDelegate(SayHello);
MsgDelegate1 += MsgOut;

在上面承載兩個函數(SayHello&MsgOut),此時並沒有參數值,但在SayHello中的?:給空參數賦了值,在DoSomething(int iCount1, int iCount2, MsgDelgate notice)中,委託承載的函數才有參數值。參數就是notice("I am good at figures:" + iCount1.ToString() + "+" + iCount2.ToString() + "=" + (iCount1 + iCount2));

這個例子中,委託在連續地做事情,MsgDelegate1先後受到SayHeloo和MsgOut的“委託”,所以在DoSomething(2, 5, MsgDelgate1)中,MsgDelgate1隻被調用一次就可以輸出兩樣東西,做完了兩件事情。

所以結果就那樣了

什麼時候使用委託:

  • 當使用事件設計模式時。
  • 當封裝靜態方法可取時。
  • 當調用主不需要訪問實現該方法的對象中的其他屬性、方法或介面時
  • 需要方便的組合時。
  • 當類可能需要該方法的多個實現時。

實際上,在這個樣本中,SayHello是一個完全沒意義的函數,看這一行sHello = sHello==null ? sHello : "Hello,My Delegate.";

這一行指出了,如果傳入的參數為null,那麼就讓它為null吧,如果不為null,就讓它為"Hello,My Delegate"吧

也就是說,無論傳入何種參數,最後輸出的都是"Hello,My Delegate"了。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.