C#委托三(多播委托)


有的時候,我們想要調用一個委托,但同時可以執行多個方法(自定義事件中最為常見),比如,一個工作文檔生成之后,系統要將生成文檔日志,而且還要被保存到數據庫中,對於以上二個操作,如果只想調用一個委托,就可以順序完成,那么使用多播委托,就可以實現。

如果調用多播委托,就可以按順序連續調用多個方法。為此,委托的簽名就必須返回 void (否則,返回值應送到何處?)(當委托只包含一個方法的時候,其返回類型的聲明可以參照所封裝的方法,不一定必須是void)。實際上,如果編譯器發現某個委托返回 void ,就會自動假定這是一個多播委托。


多播委托(MulticastDelegate)提供了一種類似於流水線式的鈎子機制,只要加載到這條流水線上的委托,都會被順序執行。因為所有的委托都繼承自MulticastDelegate,因此所的委托都具備多播特性。

 

示例代碼下載

下面通過實例來看一下多播委托:

        /// 方法一
        static void FirstMethod(string Test)
        {
            Console.WriteLine("方法一已經執行完成!");
        }

        /// <summary>
        /// 方法二
        /// </summary>
        /// <param name="Test"></param>
        static void SecondMethod(string Test)
        {
            Console.WriteLine("方法二已經執行完成!");
        }

 以上為定義了兩個具有相同簽名的方法,並且沒有返回值。

        /// <summary>
        /// 聲明一個委托,用於實現多播操作
        /// </summary>
        /// <param name="Test"></param>
        delegate void MyMulticastDelegate(string Test);

 又聲明了一個具有和兩個方法相同簽名的委托,來實現我們的多播委托操作。

        static void Main(string[] args)
        {
            ///首先創建一個委托指向FirstMethod方法
            MyMulticastDelegate MyFirst = new MyMulticastDelegate(FirstMethod);

            ///然后創建一個委托指向SecondMethod方法
            MyMulticastDelegate MySecond = new MyMulticastDelegate(SecondMethod);

            ////將這兩個方法合並到一個多播委托中
            MyMulticastDelegate multicastDelegate = MyFirst;

            //在多播委托的調用鏈中添加新的委托元素

            multicastDelegate = multicastDelegate + MySecond;



            //調用多播委托,並且序列執行兩個委托所指向的方法

            multicastDelegate("Test");

            Console.Read();

        }

 然后進行以上操作,執行結果如下:

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2024 CODEPRJ.COM