C#委託之初識委託

來源:互聯網
上載者:User

當我剛學習C#是接觸事件時,就在思考它是怎樣一種機制,直到深入的接觸委託對事件有了更深刻的認識,這是一個回到函數,在.NET Framework 中運用的很廣泛,如表單狀態變化,菜單選項等等。那有沒有思考過它是如何?的那,這就要說到委託
,委託是一個類似於C中的函數指標的東西,但C#提供給委託更為安全的類型機制。

下面給大家掩飾一下委託的聲明建立和使用:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

 

namespace MyDelegate

{

    class Program

{

public delegate void   FunBock(int   value);

 

        static void Main(string[]
args)

        {

            Program
p = new Program();

            StaticDelegate();

            instanceDelegate(p);

            chainDelete(p );

        }

 

        public static  void counter(int
from,int tow , FunBock
fb)

        {

            for
(int i = from; i <= tow; i++)

            {

               
if (fb != null)

                    fb(i);

                else
return;

            }

        }

 

        // 代理靜態方法

        public static void
StaticDelegate()

        {

            Console.WriteLine("-------------代理靜態函數----------------");

            Program.counter(0,1,null);

            Program.counter(0,
1, new FunBock(Program.StaticFunction ));

            Console.WriteLine();

        }

 

 

        //代理執行個體方法

        public static void
instanceDelegate(Program p )

        {

            Console.WriteLine("------------代理執行個體方法----------------");

            Program.counter(0,
1, null);

            Program.counter(0,
1, new FunBock(p.ObjectFunction
));

            Console.WriteLine();

        }

 

        //代理串列函數

        public static void
chainDelete(Program p )

        {

            Console.WriteLine("------------代理串列函數----------------");

            FunBock
fb1 = null;

             fb1 =(FunBock)Delegate.Combine(fb1, new
FunBock(p.ObjectFunction));

             fb1 = (FunBock)Delegate.Combine(fb1,new
FunBock(Program.StaticFunction));

            Program.counter(0,
1, fb1);

            Console.WriteLine();

 

        }

 

        public void ObjectFunction(int
value  )

        {

            Console.WriteLine("ObjectFunction方法 值是:" + value);

        }

 

        private
static void
StaticFunction(int   value )

        {

            Console.WriteLine("StaticFunction方法 值是:" + value);

        }

 

    }

}

解析:delegate是委託聲明,聲明指定了一個委託函數的簽名。在本例中採用一個int的參數無傳回型別的委託,這就聲明了所有的無傳回型別的有一個int型別參數的所有函數都為它的指向值,類似與類與執行個體對象的概念,FunBock類,所有滿足約束條件的方法都可以看作這個類的執行個體!

關於chainDelete實現了鏈式的代理將在委託鏈中詳細講解!

聯繫我們

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