程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C#中的委托是什麼?,

C#中的委托是什麼?,

編輯:C#入門知識

C#中的委托是什麼?,


概述

  委托類似C++中的函數指針,但是又有所不同。在C++中,函數指針不是類型安全的,它指向的是內存中的某一個位置,我們無法判斷這個指針實際指向什麼,對於參數和返回類型就更難以知曉。而.NET的委托則完全不同,它是類型安全的類,我們可以清晰的知道委托定義的返回類型和參數類型。它不僅可以包含方法的引用,還可以包含多個方法的引用。這就是委托,.尋址方法的.NET版本。

理解委托

  在實際的開發過程中,有時某個方法執行的操作並不是針對數據進行的,而是針對另一個方法,但是這個方法在編譯時又無法得知,只能在運行時才知道。如果是針對數據做操作,只需將數據作為方法的參數傳入即可,那麼針對方法做操作,很明顯將方法作為參數傳入即可,聽起來的確很奇怪,但是需要先接受這個現實,然後從使用中去體會它的含義。下面舉一個例子(請原諒我的英語 ,my english is poor!),這樣一個場景:媒婆給菇涼或者小伙介紹對象,如果是對象是男的,菇涼就說出她的聯系方式,如果是女的,小伙就說出他的聯系方式(PS:我們這裡都是正常的性取向)。

看一下代碼圖

 

在命名空間裡,定義一個委托,和類是平級的

    public delegate string GetTelphone();  //用來得到聯系方式的。

概述中提到,委托可以定義返回類型和參數類型,那麼這個委托的返回類型就是string,無參的。

繼續。。。。

 

媒婆類:

    /// <summary>
    /// 媒婆
    /// </summary>
    class MeiPo
    {
        public string Sex { get; set; }
        public void GetTel(GetTelphone getTelphone)
        {
            Console.WriteLine(getTelphone.Invoke());
        }
    }

可以看到,GetTel方法的參數是一個委托類型的,和一般的基本類型和常見引用類型引用方式一樣使用。然後再方法體執行委托方法,輸出結果。

 

菇涼類:

    /// <summary>
    /// 菇涼
    /// </summary>
    class Girl
    {
        public string GetGirlTel()
        {
            return "得到菇涼的電話";
        }
    }

小伙類:

    /// <summary>
    /// 男屌絲
    /// </summary>
    class DiaoSi
    {
        public string GetBoyTel()
        {
            return "得到男屌絲的電話";
        }
    }

最後上測試類

        static void Main(string[] args)
        {
            var redMun = new MeiPo {Sex = "男"};
            var del= new GetTelphone(new Girl().GetGirlTel);
            if(redMun.Sex=="女")
                del = new GetTelphone(new DiaoSi().GetBoyTel);
            redMun.GetTel(del);

            Console.ReadKey();
        }

執行步驟:

1、創建媒婆對象,媒婆介紹一個sex="男",

2、創建委托對象,委托是一個類,所以用new來實例化。委托即指方法的引用,所在初始化時傳入指向的方法引用new Girl().GetGrilTel

3、如果媒婆介紹的是sex="女",那麼委托指向另一個方法

4、媒婆對象調用GetTel得到聯系方式

 

總結:委托內容比較復雜,鑒於筆者水平有限,理解有限,這裡先解釋這麼多,以後如果理解更深後,繼續分享。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved