C#委託

來源:互聯網
上載者:User

委託是一種引用方法的類型。委託定義出它想要代表的方法的原型,然後它可以和任何符合它所定義的方法的原型相關聯。但使用委託時就猶如你在調用一個方法。
委託使你動態調用方法變成可能。而動態調用方法的意義就在於你可以在任意的地方插入任意的代碼
//=========================================================================================
using System;
using System.Collections.Generic;
using System.Text;

namespace Delegate_Test
{
    /// <summary>
    /// 定義一個委託。委託和類一樣都是一種類型。只是委託所代表的是一種被定義好原型的方法。
    /// </summary>
    public delegate void Mydeleg(string msg);

    public class Program
    {
        static void Main(string[] args)
        {
            //執行個體化一個委託,也可以看成將一個委託和一個實際想要調用的方法關聯起來。
            //其中new Mydeleg(GetMessage) 中的GetMessage是定義個方法的執行個體。你也可以將GetMessage換成GetMessage2
            //原因稍後將要進一步的講解。
            Mydeleg methodRef = new Mydeleg(GetMessage);
            methodRef("The first message!");

            Console.WriteLine("================================================");

            //執行個體化message對象
            Message message = new Message();
            //設定message對象中的委託類型的成員變數。
            message.deleg = new Mydeleg(SendMobilePhone);
            //當調用這句的時候實際上在Send方法中附加了底下SendMobilePhone中包含的邏輯(發送方式的邏輯)。
            message.Send("I love you");
            Console.Read();
        }

        static void GetMessage(string msgInfo)
        {
            Console.WriteLine(msgInfo);
        }

        static void GetMessage2(string msgInfo2)
        {
            Console.WriteLine(msgInfo2);
        }

        static void SendMobilePhone(string msg)
        {
            //表示發送到手機上的邏輯。
            Console.WriteLine(msg + " send to MobilePhone");
        }
    }

    //==============================================================================================================

    public class TestClass
    {
        public void GetMessage(string msg)
        {
            Console.WriteLine(msg);
        }
    }

    //==============================================================================================================

    /// <summary>
    /// 假設這是一能夠發送資訊的類。我們可以通過這個類處理管理"資訊的各種處理“。
    /// </summary>
    public class Message
    {
        public Mydeleg deleg;
        public void Send(string message)
        {
            //表示我在發送資訊前對資訊做一定的加工。
            string result = "you have a message : " + message;
            //然後我們需要將這個資訊發送。現在我在想一件事情。我要將資訊怎麼發送?發送到哪?
            //發生資訊到手機, 那你需要在這裡編寫發送到手機上的代碼邏輯
            //發送資訊到郵箱, 那你需要在這裡編寫發送到郵箱上的代碼邏輯
            //發送資訊到QQ上,  那你需要在這裡編寫發送到QQ上的代碼邏輯
            //或發送資訊到手機並且郵箱、QQ中,又是相應的邏輯。
            //我還能列舉很多。你現在要解決的問題是如果在不改變這個類的前提下你如何將資訊發送到客戶需要發送的地方。
            //我的想法是,使用委託。
            if (deleg != null)
                //調用這句你將發現實際是將外部定義的方法引用到這裡。使你的方法擁有了在外部定義發送邏輯的能力。
                deleg(message);
        }
    }

}

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.