国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
C#:代表(delegate)和事件(event) (轉(zhuǎn))

代表(delegate):

 它是C#語(yǔ)言里面的函數(shù)指針,代表可以指向某一個(gè)函數(shù),在運(yùn)行的時(shí)候調(diào)用這個(gè)函數(shù)的實(shí)現(xiàn)。下面來(lái)看看它的實(shí)現(xiàn)步驟:

  1. 聲明一個(gè)delegate對(duì)象。
  2. 實(shí)現(xiàn)和delegate具有相同參數(shù)和返回值的函數(shù)實(shí)現(xiàn)(可以是靜態(tài)和非靜態(tài)的)。
  3. 產(chǎn)生一個(gè)delegate對(duì)象的時(shí)候,把你剛剛實(shí)現(xiàn)的函數(shù)作為參數(shù)傳給他的構(gòu)造函數(shù)。

請(qǐng)看下面例子:

using System;
using System.Collections.Generic;
using System.Text;

namespace UsingDelegate
{
    public delegate void MyDelegate(string mydelegate);//聲明一個(gè)delegate對(duì)象

    public class TestClass
    {

        //實(shí)現(xiàn)有相同參數(shù)和返回值的函數(shù)
        public void HelloDelegate(string mydelegate)
        {
            Console.WriteLine(mydelegate);
        }

       //實(shí)現(xiàn)有相同參數(shù)和返回值的靜態(tài)函數(shù)

        public static void HelloStaticDelegate(string mystaticdelegate)
        {
            Console.WriteLine(mystaticdelegate);
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            TestClass testClass = new TestClass();
            MyDelegate mydelegate = new MyDelegate(testClass.HelloDelegate);//產(chǎn)生delegate對(duì)象
            mydelegate("Hello delegate");//調(diào)用

            MyDelegate myStaticDelegate = new MyDelegate(TestClass.HelloStaticDelegate);//產(chǎn)生delegate對(duì)象
            myStaticDelegate("Hello static delegate");//調(diào)用
        }
    }
}

 

事件(event):

讓我通過(guò)一個(gè)例子來(lái)模擬事件的整個(gè)過(guò)程:

  1. 創(chuàng)建一個(gè)button類,它里面有一個(gè)click 事件。
  2. 創(chuàng)建一個(gè)Form類,他里面有一個(gè)我們上面定義的button類。
  3. 要求:當(dāng)我們用戶單擊button類的時(shí)候From類要對(duì)他進(jìn)行處理,輸出一條信息“我知道你被單擊了”

請(qǐng)看下圖:

首先我們會(huì)單擊button,然后button會(huì)通知Form,然后From就作出相應(yīng)。這個(gè)過(guò)程在C#里面應(yīng)該怎么做到呢?

下面我會(huì)列出上述例子的源代碼(這里就不介紹怎么聲明event等等內(nèi)容了):

using System;
using System.Collections.Generic;
using System.Text;

namespace UsingEvent
{
    public delegate void ClickEventHandler(object sender, EventArgs e);//聲明一個(gè)代表:請(qǐng)看文章最后面Note

    public class MyButton              //創(chuàng)建MyBottom
    {
        public event ClickEventHandler ClickEvent;//聲明一個(gè)事件

        public void Click()                                 //單擊MyButton
        {
            if (ClickEvent != null)
            {
                Console.WriteLine("MyButton: 我被單擊了");
                ClickEvent(this, null);                          //拋出事件,給所有相應(yīng)者
            }
        }
    }

    public class MyForm
    {
        public MyButton myButton = new MyButton();

        public MyForm()
        {

            //添加事件到myButton中,當(dāng)myButton被單擊的時(shí)候就會(huì)調(diào)用相應(yīng)的處理函數(shù)

            myButton.ClickEvent += new ClickEventHandler(OnClickEvent);   

         }

       //事件處理函數(shù)

       void OnClickEvent(object sender, EventArgs e)
        {
            Console.WriteLine("MyForm: 我知道你被單擊了!");
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            MyForm form = new MyForm();//生成一個(gè)MyForm

            form.myButton.Click();//單擊MyForm中的鼠標(biāo),效果就出來(lái)了
        }
    }
}
 

Note:public delegate void ClickEventHandler(object sender, EventArgs e);這是事件委托標(biāo)準(zhǔn)的聲明方法,其實(shí)在參數(shù)里面我們可以不傳,也可以是其他類型的。但是最好還是使用上面的聲明方法,你可以繼承EventArgs,來(lái)包裝你要傳送的其他任何參數(shù)。 

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
.net的事件與委托(轉(zhuǎn)載)
Delegate委托之學(xué)習(xí)心得
關(guān)于Delegate 和 MulticastDelegate的實(shí)現(xiàn)
對(duì)于“委托”的解釋摘錄(三)
C# Event/UnityEvent辨析
大白話系列之C#委托與事件講解(一)
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服