委託使用(2)

來源:互聯網
上載者:User

class ClassWithDelegate    

{    

    public delegate int DelegateThatReturnsInt();        

    public DelegateThatReturnsInt theDelegate;    

    public void Run()     

   {        

           for (; ; )      

         {     

                 Thread.Sleep(500);

                 if (theDelegate != null)

                {//第一個方法DisplayCounter()(由FirstSubscriber調用),返回1,2,3,4,5.但是這些值都將被第二個方法返回的值所覆蓋 

                   //我的目的是依次顯示每個方法調用的結果。為此,必須接管多重委託所封裝方法調用的職責。

                    foreach (DelegateThatReturnsInt del in theDelegate.GetInvocationList())

                    {

                        int result = del();

                        Console.WriteLine("Delegate fired! Returned result:{0}", result.ToString());

                    }

                    Console.WriteLine();

                }

            }

        }

}

    class FirstSubscriber

    {

        private int myCounter = 0;

        public void Subscribe(ClassWithDelegate theClassWithDelegate)

        {

            theClassWithDelegate.theDelegate += new ClassWithDelegate.DelegateThatReturnsInt(DisplayCounter);//委託執行個體化                                        //theClassWithDelegate.theDelegate +=DisplayCounter可以寫成這樣

            //也可以之間用匿名過程,可以把DisplayCounter()函數去掉

            // theClassWithDelegate.theDelegate +=delegate()

            //{

            //      return ++myCounter;

            // };

        }

        public  int DisplayCounter()

        {

            return ++myCounter;

        }

    }

    class SecondSubscriber

    {

        private int myCounter = 0;

        public void Subscriber1(ClassWithDelegate theClassWithDelegate)

        {

            theClassWithDelegate.theDelegate += new ClassWithDelegate.DelegateThatReturnsInt(DisplayCounter1);//委託執行個體化

        }

        public int DisplayCounter1()

        {

            return myCounter += 2;

        }

    }

 

ClassWithDelegate classWithDelegate = new ClassWithDelegate();

FirstSubscriber firstSubscriber = new FirstSubscriber();            

firstSubscriber.Subscribe(classWithDelegate);            

SecondSubscriber secondSubscriber = new SecondSubscriber();            

secondSubscriber.Subscriber1(classWithDelegate);                       

classWithDelegate.Run();

聯繫我們

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