欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C#中的事件介紹

 更新時(shí)間:2015年01月05日 12:07:21   投稿:junjie  
這篇文章主要介紹了C#中的事件介紹,本文對C#事件的語法、定義方法、調(diào)用方法等做了講解,需要的朋友可以參考下

事件

   語法

   訪問修飾符 event 委托名稱 事件名稱;

   定義事件:

復(fù)制代碼 代碼如下:

   public  delegate void delTest();

   public  event  delTest  eventTest;


   注冊事件(可以給一個(gè)事件注冊多個(gè)方法)
復(fù)制代碼 代碼如下:

   eventTest += new delTest(method1);

   eventTest += new delTest(method2);


 

自定義事件的基礎(chǔ)

    1.當(dāng)一個(gè)結(jié)果發(fā)生時(shí),有可能引起另外的一些反應(yīng)。這就好像因果關(guān)系。而事件,則是這個(gè)因與果的內(nèi)部聯(lián)系。
    2.在C#中,我們經(jīng)常看到:

復(fù)制代碼 代碼如下:

private void button1_Click(object sender, EventArgs e)
{
 
        …………………….//代碼段
 
}

自定義事件的實(shí)例

從網(wǎng)上找了一個(gè)比較容易理解的自定義事件實(shí)例,記錄再次方便學(xué)習(xí)。原文地址:http://www.dbjr.com.cn/article/59459.htm

發(fā)布事件的類TestEventSource:

復(fù)制代碼 代碼如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace EventDemo
{
    /// <summary>
    /// 發(fā)布事件的類
    /// </summary>
    public class TestEventSource
    {
        //定義事件參數(shù)類
        public class TestEventArgs : EventArgs
        {
            public readonly char KeyToRaiseEvent;
            public TestEventArgs(char keyToRaiseEvent)
            {
                KeyToRaiseEvent = keyToRaiseEvent;
            }
        }
        //定義delegate
        public delegate void TestEventHandler(object sender, TestEventArgs e);
        //用event 關(guān)鍵字聲明事件對象
        public event TestEventHandler TestEvent;
        //事件觸發(fā)方法
        protected virtual void OnTestEvent(TestEventArgs e)
        {
            if (TestEvent != null)
                TestEvent(this, e);
        }
        //引發(fā)事件
        public void RaiseEvent(char keyToRaiseEvent)
        {
            TestEventArgs e = new TestEventArgs(keyToRaiseEvent);
            OnTestEvent(e);
        }
    }
}

監(jiān)聽事件的類TestEventListener

復(fù)制代碼 代碼如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace EventDemo
{
    /// <summary>
    /// 監(jiān)聽事件的類
    /// </summary>
    public class TestEventListener
    {
        //定義處理事件的方法,他與聲明事件的delegate具有相同的參數(shù)和返回值類型
        public void KeyPressed(object sender, TestEventSource.TestEventArgs e)
        {
            Console.WriteLine("發(fā)送者:{0},所按得健為:{1}", sender, e.KeyToRaiseEvent);
        }
        //訂閱事件
        public void Subscribe(TestEventSource evenSource)
        {
            evenSource.TestEvent += new TestEventSource.TestEventHandler(KeyPressed);
        }
        //取消訂閱事件
        public void UnSubscribe(TestEventSource evenSource)
        {
            evenSource.TestEvent -= new TestEventSource.TestEventHandler(KeyPressed);
        }
    }
}

測試:

復(fù)制代碼 代碼如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace EventDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            //創(chuàng)建事件源對象
            TestEventSource es = new TestEventSource();
            //創(chuàng)建監(jiān)聽對象
            TestEventListener el = new TestEventListener();
            //訂閱事件
            Console.WriteLine("訂閱事件\n");
            el.Subscribe(es);
            //引發(fā)事件
            Console.WriteLine("輸入一個(gè)字符,再按enter鍵");
            string s = Console.ReadLine();
            es.RaiseEvent(s.ToCharArray()[0]);
            //取消訂閱事件
            Console.WriteLine("\n取消訂閱事件\n");
            el.UnSubscribe(es);
            //引發(fā)事件
            Console.WriteLine("輸入一個(gè)字符,再按enter健");
            s = Console.ReadLine();
            es.RaiseEvent(s.ToCharArray()[0]);
        }
    }
}

結(jié)果:

結(jié)論:

       TestEventSource類。他就相當(dāng)于windows控件類一樣,是事件的源,里面包含有事件的聲明,以及存儲調(diào)用參數(shù)的事件參數(shù)類,以及事件的觸發(fā)方法。     

       TestEventListener類。他提供了事件處理程序,并實(shí)現(xiàn)了事件處理程序和事件對象的邦定,當(dāng)然時(shí)間處理程序可以放在別處, 跟邦定程序(訂閱事件)放在一起便于理解和調(diào)用

       Test 類,實(shí)例化自定義事件的事件源對象,并調(diào)用 TestEventListener類中的Subscribe(es);方法進(jìn)行事件對象和事件處理程序的邦定(訂閱事件),調(diào)用 TestEventSource類中的RaiseEvent(char keyToRaiseEvent)引發(fā)對象,并有對象所指定的委托回調(diào)處理事件。完成整個(gè)自定義事件。

       其中   RaiseEvent(char keyToRaiseEvent)  就相當(dāng)于main()一樣是自定義事件的執(zhí)行入口,  從這個(gè)法開始---〉調(diào)用事件委托----〉查找訂閱事件程序找到事件所封裝的方法集----〉由委托回調(diào)事件處理程序并傳遞參數(shù)---〉執(zhí)行事件處理程序。

 

委托與事件總結(jié)

委托的作用:

占位,在不知道將來要執(zhí)行的方法的具體代碼時(shí),可以先用一個(gè)委托變量來代替方法調(diào)用(委托的返回值,參數(shù)列表要確定)。在實(shí)際調(diào)用之前,需要為委托賦值,否則為null。

事件的作用:

事件的作用與委托變量一樣,只是功能上比委托變量有更多的限制。(比如:1.只能通過+=或-=來綁定方法(事件處理程序)2.只能在類內(nèi)部調(diào)用(觸發(fā))事件。)

 

委托:類型安全的指向函數(shù)的指針

使用步驟


 1:聲明一個(gè)委托 delegate string DelString(string s)

   2:定義一個(gè)委托變量

      DelString del = new DelString(ToUpper)

      DelString del = ToUpper

   3:使用委托

      del(s);

匿名方法*

 

復(fù)制代碼 代碼如下:

DelString del = delegate(string s) {  Console.WriteLine(s);  }

多播委托

復(fù)制代碼 代碼如下:

   DelMath del = Add;

   del += Sub;   del = del + Sub;

   del += Mul;

   del -= Mul;

事件

   原理  定義一個(gè)事件的時(shí)候生成一個(gè)私有的委托

      通過生成的add和remove方法對委托注冊方法和移除方法

      調(diào)用事件的時(shí)候最終調(diào)用的是委托指向的方法

   使用步驟

      1:定義事件

復(fù)制代碼 代碼如下:

        public event EventHandler PlayOver;

      2:調(diào)用事件
復(fù)制代碼 代碼如下:

        if (PlayOver != null)

        {

           PlayOver(this, null);

        }


      3:外部注冊事件
復(fù)制代碼 代碼如下:

            Player1 p = new Player1("真的恨你");

            p.PlayOver += new PlayOverEventHandler(p_PlayOver);

            p.Play();


   EventHandler 事件委托

   EventArgs 事件源參數(shù)

事件是成員

    由于事件不是類型,所以我們不能使用對象創(chuàng)建表達(dá)式(new表達(dá)式)來創(chuàng)建它的對象

    事件必須聲明在類或結(jié)構(gòu)中,和其他成員一樣

    我們不能在一段可執(zhí)行代碼中聲明事件

    事件被隱式自動(dòng)初始化為null

 

事件使用的標(biāo)準(zhǔn)模式的根本就是System命名空間聲明的EventHandler委托類型。EventHandler委托雷池的聲明如下面代碼所示。

     1.第一個(gè)參數(shù)用來保存觸發(fā)事件的對象的引用。由于是object類型,所以可以匹配任何類型的實(shí)例。

     2.第二個(gè)參數(shù)用來保存有關(guān)狀態(tài)對于應(yīng)用程序來說是否合適的狀態(tài)信息。

     3.返回參數(shù)是void。

復(fù)制代碼 代碼如下:

              public delegate void EventHandler(object sender,EventArgs e);

相關(guān)文章

  • C#監(jiān)控文件夾并自動(dòng)給圖片文件打水印的方法

    C#監(jiān)控文件夾并自動(dòng)給圖片文件打水印的方法

    這篇文章主要介紹了C#監(jiān)控文件夾并自動(dòng)給圖片文件打水印的方法,涉及C#針對文件夾及圖片操作的相關(guān)技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2015-05-05
  • C#中自定義高精度Timer定時(shí)器的實(shí)例教程

    C#中自定義高精度Timer定時(shí)器的實(shí)例教程

    這篇文章主要介紹了C#中自定義高精度Timer定時(shí)器的實(shí)例教程,多線程的Timer編寫需要注意線程安全的問題,需要的朋友可以參考下
    2016-04-04
  • 如何使用Dapper處理多個(gè)結(jié)果集與多重映射實(shí)例教程

    如何使用Dapper處理多個(gè)結(jié)果集與多重映射實(shí)例教程

    Dapper類是一個(gè)開源的數(shù)據(jù)庫操作類,下面這篇文章主要給大家介紹了關(guān)于如何使用Dapper處理多個(gè)結(jié)果集與多重映射的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-09-09
  • c# 開發(fā)文字識別軟件

    c# 開發(fā)文字識別軟件

    這篇文章主要介紹了c# 開發(fā)文字識別軟件的方法,幫助大家更好的利用c#進(jìn)行文字識別,感興趣的朋友可以了解下
    2020-12-12
  • C#中控件動(dòng)態(tài)添加事件綁定的時(shí)機(jī)詳解

    C#中控件動(dòng)態(tài)添加事件綁定的時(shí)機(jī)詳解

    這篇文章主要給大家介紹了在C#中為控件動(dòng)態(tài)添加事件綁定的時(shí)機(jī)的相關(guān)資料,文中介紹的非常詳細(xì),對大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面跟著小編一起來學(xué)習(xí)學(xué)習(xí)吧。
    2017-06-06
  • C# windows語音識別與朗讀實(shí)例

    C# windows語音識別與朗讀實(shí)例

    這篇文章主要為大家詳細(xì)介紹了C# windows語音識別與朗讀實(shí)例,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-07-07
  • visio二次開發(fā)--判斷文檔是否已發(fā)生變化(變化就加星號*)

    visio二次開發(fā)--判斷文檔是否已發(fā)生變化(變化就加星號*)

    最近做一個(gè)故障樹診斷的項(xiàng)目,用visio二次開發(fā),可以同時(shí)打開多個(gè)繪制的故障樹圖形文檔。項(xiàng)目中需要實(shí)現(xiàn)判斷文檔是否發(fā)生變化,這是很多編輯軟件的基本功能,變化了就加個(gè)星號*
    2013-04-04
  • C#中單問號(?)和雙問號(??)的用法整理

    C#中單問號(?)和雙問號(??)的用法整理

    本文詳細(xì)講解了C#中單問號(?)和雙問號(??)的用法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-05-05
  • Unity3D Ui利用shader添加效果

    Unity3D Ui利用shader添加效果

    這篇文章主要為大家詳細(xì)介紹了Unity3D Ui利用shader添加效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-02-02
  • Dictionary擴(kuò)展基礎(chǔ)類向字典中添加鍵和值

    Dictionary擴(kuò)展基礎(chǔ)類向字典中添加鍵和值

    Dictionary<TKey, TValue> 類是常用的一個(gè)基礎(chǔ)類,但用起來有時(shí)確不是很方便。本文逐一討論,并使用擴(kuò)展方法解決
    2013-11-11

最新評論