如何理解事件和委託

我喜歡將書中的知識看懂後造成我的的理解:html

1、你如何理解委託ide

        若是咱們不理解決委託,那應該都理解類,那咱們就從類角度來看看什麼是委託。post

        在我看來類和委託是同一級別的東西,類它對具體的實例進行了抽象,也就是它肯定了實例的基本骨架,而委託是對具體方法的抽象,它定義了具體方法的基本骨架,和類同樣都是經過new 方法進行實例化,spa

        只是建立委託實例時要一個調用的目標方法。code

     下面是委託的使用:htm

public delegate void myDelegate( string str); 
public static void HellowChinese( string strChinese) 
     Console.WriteLine( "Good morning," + strChinese); 
     Console.ReadLine(); 
   
myDelegate d = new myDelegate(HellowChinese); 
d( "Mr wang" );
 
2、你如何理解事件
      若是咱們不理解事件,那咱們應該理解類中的字段和屬性,那咱們就從字段和屬性角度來理解事件
       咱們都知道對類中屬性的賦值和取值就是調用get和set方法對字段進行操做,一樣訂閱和取消訂閱一個事件時和屬性的狀況同樣,實際是在調用add和remove方法,咱們是對過+=和-=運算符使用委託類型的字段。
       「事件」存在的的理由和「屬性」差很少,它們添加了一個封裝層,實現發佈、訂閱模式。一般,咱們不但願其它代碼隨意更改一個事件的處理程序,固然類能經過添加方法的方式來提供額外的訪問。
      聲明一個事件後編譯器會將聲明轉換成一個具備默認add\remove實現的事件和一個私有委託類型的字段,類內的代碼能看見字段,類外的代碼只能看見事件。
     這樣一來,表面上彷佛能調用一個事件,,其實是調用存儲在字段中的委託實例。
    也就是說事件不是委託實例,它只是成對的add/remove方法,相似於屬性的取值和賦值方法。
   下面是事件的使用:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;blog

namespace Example_EventTest
{
    class Judgment
    {
        //定義一個委託
        public delegate void delegateRun();
        //定義一個事件
        public event delegateRun eventRun;
        //引起事件的方法
        public void Begin()
        {
            eventRun();//被引起的事件
        }
    }
    class RunSports
    {
        //定義事件處理方法
        public void Run()
        {
            Console.WriteLine("運動員開始比賽");
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            RunSports runsport = new RunSports();//實例化事件發佈者
            Judgment judgment = new Judgment();//實例化事件訂閱者
            //訂閱事件
            judgment.eventRun+=new Judgment.delegateRun(runsport.Run);
            //引起事件
            judgment.Begin();
            Console.ReadKey();
        }
    }
}事件

相關文章
相關標籤/搜索