最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#中的事件介紹

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

事件

   語法

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

   定義事件:

復制代碼 代碼如下:

   public  delegate void delTest();

   public  event  delTest  eventTest;


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

   eventTest += new delTest(method1);

   eventTest += new delTest(method2);


 

自定義事件的基礎

    1.當一個結果發(fā)生時,有可能引起另外的一些反應。這就好像因果關系。而事件,則是這個因與果的內(nèi)部聯(lián)系。
    2.在C#中,我們經(jīng)??吹剑?br />

復制代碼 代碼如下:

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

自定義事件的實例

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

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

復制代碼 代碼如下:

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 關鍵字聲明事件對象
        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

復制代碼 代碼如下:

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);
        }
    }
}

測試:

復制代碼 代碼如下:

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("輸入一個字符,再按enter鍵");
            string s = Console.ReadLine();
            es.RaiseEvent(s.ToCharArray()[0]);
            //取消訂閱事件
            Console.WriteLine("\n取消訂閱事件\n");
            el.UnSubscribe(es);
            //引發(fā)事件
            Console.WriteLine("輸入一個字符,再按enter健");
            s = Console.ReadLine();
            es.RaiseEvent(s.ToCharArray()[0]);
        }
    }
}

結果:

結論:

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

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

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

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

 

委托與事件總結

委托的作用:

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

事件的作用:

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

 

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

使用步驟


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

   2:定義一個委托變量

      DelString del = new DelString(ToUpper)

      DelString del = ToUpper

   3:使用委托

      del(s);

匿名方法*

 

復制代碼 代碼如下:

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

多播委托

復制代碼 代碼如下:

   DelMath del = Add;

   del += Sub;   del = del + Sub;

   del += Mul;

   del -= Mul;

事件

   原理  定義一個事件的時候生成一個私有的委托

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

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

   使用步驟

      1:定義事件

復制代碼 代碼如下:

        public event EventHandler PlayOver;

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

        if (PlayOver != null)

        {

           PlayOver(this, null);

        }


      3:外部注冊事件
復制代碼 代碼如下:

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

            p.PlayOver += new PlayOverEventHandler(p_PlayOver);

            p.Play();


   EventHandler 事件委托

   EventArgs 事件源參數(shù)

事件是成員

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

    事件必須聲明在類或結構中,和其他成員一樣

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

    事件被隱式自動初始化為null

 

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

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

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

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

復制代碼 代碼如下:

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

相關文章

  • C#中IEnumerable、ICollection、IList、List之間的區(qū)別

    C#中IEnumerable、ICollection、IList、List之間的區(qū)別

    這篇文章主要介紹了C#中IEnumerable、ICollection、IList、List之間的區(qū)別,本文分別分析了它的實現(xiàn)源碼,從而總結出了它們之間的關系和不同之處,需要的朋友可以參考下
    2015-06-06
  • C#中的異常處理問題try catch finally

    C#中的異常處理問題try catch finally

    這篇文章主要介紹了C#中的異常處理問題try catch finally,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • 說說C#的async和await的具體用法

    說說C#的async和await的具體用法

    本篇文章主要介紹了說說C#的async和await的具體用法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-09-09
  • 使用 C# 下載文件的多種方法小結

    使用 C# 下載文件的多種方法小結

    本文從最簡單的下載方式開始步步遞進,講述了文件下載過程中的常見問題并給出了解決方案。并展示了如何使用多線程提升 HTTP 的下載速度以及調(diào)用 aria2 實現(xiàn)非 HTTP 協(xié)議的文件下載,對C# 下載文件相關知識感興趣的朋友一起看看吧
    2021-08-08
  • C#微信接口之推送模板消息功能示例

    C#微信接口之推送模板消息功能示例

    這篇文章主要介紹了C#微信接口之推送模板消息功能,結合實例形式分析了C#操作微信推送模板消息接口的具體操作步驟與相關使用技巧,需要的朋友可以參考下
    2017-07-07
  • C#開發(fā)微信門戶及應用(4) 關注用戶列表及詳細信息管理

    C#開發(fā)微信門戶及應用(4) 關注用戶列表及詳細信息管理

    這篇文章主要為大家詳細介紹了C#開發(fā)微信門戶及應用第四篇,關注用戶列表及詳細信息管理,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • C#漢字轉(zhuǎn)拼音實例(支持多音字)

    C#漢字轉(zhuǎn)拼音實例(支持多音字)

    幾年前就在網(wǎng)上看到過漢字轉(zhuǎn)拼音的程序,大都就是按漢字的編碼轉(zhuǎn)換,單字對應的算法實現(xiàn)的。但是都有一個共同的缺點,不能支持多音字。本篇文章主要介紹了C#漢字轉(zhuǎn)拼音實例(支持多音字),有興趣的可以了解一下。
    2016-12-12
  • C#開發(fā)微信門戶及應用(3) 文本消息和圖文消息應答

    C#開發(fā)微信門戶及應用(3) 文本消息和圖文消息應答

    這篇文章主要為大家詳細介紹了C#開發(fā)微信門戶及應用第二篇,微信文本消息和圖文消息的應答,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • C#操作windows系統(tǒng)進程的方法

    C#操作windows系統(tǒng)進程的方法

    這篇文章主要介紹了C#操作windows系統(tǒng)進程的方法,涉及C#針對windows操作系統(tǒng)進程的創(chuàng)建與關閉的技巧,需要的朋友可以參考下
    2015-04-04
  • Asp.Net中MVC緩存詳解

    Asp.Net中MVC緩存詳解

    這篇文章主要介紹了Asp.Net中MVC緩存的種類區(qū)別等內(nèi)容,一下來學習下。
    2017-12-12

最新評論

宝丰县| 色达县| 锡林浩特市| 岳普湖县| 乡宁县| 濮阳市| 张家口市| 确山县| 九寨沟县| 紫云| 杭州市| 上林县| 兴仁县| 山丹县| 麻阳| 杨浦区| 平阴县| 呼和浩特市| 临猗县| 满洲里市| 东平县| 平顶山市| 禹州市| 科技| 且末县| 日土县| 青海省| 永川市| 盈江县| 龙州县| 孝昌县| 阿拉善右旗| 钦州市| 醴陵市| 万年县| 汕尾市| 盱眙县| 海淀区| 祥云县| 涞源县| 仪陇县|