委託和事件

委託是一種引用方法的類型,一旦爲委託分配方法,委託將與方法具有完全相同的行爲,具有參數和返回值。委託中的方法可以是靜態的也可以是實例方法。

委託特點:1、委託類似於C++函數指針,但它們是類型安全的。

2、委託允許將方法作爲參數進行傳遞。

3、委託可以定義回調方法。

4、 委託可以鏈接在一起。

5、 方法不必與委託簽名完全匹配。

委託的協變:把子類型賦給父類型,代理返回值類型大於方法的。

class Phone

    {

    }

    class Mobile : Phone

    {

    }

    delegate Phone PhoneDele();

    class Program

    {

        static void Main(string[] args)

        {

            Program pro = new Program();

            PhoneDele pd1 = pro.GetPhone;

            PhoneDele pd2 = pro.GetMobile;//委託類型的協變

        }

        public Phone GetPhone()

        {

            return null;

        }

        public Mobile GetMobile()

        {

            return null;

        }

    }

 

委託的逆變:形參爲父類,實參爲子類,代理的參數類型小於方法的。

class Phone

    {    }

    class Mobile : Phone

    {    }

    delegate void PhoneDele(Mobile  pho);

    class Program

    {

        static void Main(string[] args)

        {

            Program pro = new Program();

            PhoneDele pd1 = pro.SetPhone;//委託類型的逆變

            PhoneDele pd2 = pro.SetMobile;

        }

        public void SetPhone(Phone pho)

        {     }

        public void SetMobile(Mobile mob)

        {  }

    }

協變和逆變正好說明了委託的第五個特點。

事件和委託的關聯

1、定義委託

delegate void DL(string str);

2、定義事件

event DL sj //事件名和委託名必須一樣

3、定義委託方法

public void MyMethod(string str)

        {

            Console.WriteLine("方法參數爲:" + str);

        }

 

4、訂閱方法

Program pro = new Program();

pro.MyEvent += new MyDele(pro.MyMethod);

5觸發事件

pro.MyMethod("參數1");

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章