1. 程式人生 > >如何理解事件和委托

如何理解事件和委托

方式 tel 運算 using 來看 操作 new 不理解 什麽是

我喜歡將書中的知識看懂後形成個人的理解:

一、你如何理解委托

如果我們不理解決委托,那應該都理解類,那我們就從類角度來看看什麽是委托。

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

只是創建委托實例時要一個調用的目標方法。

下面是委托的使用:

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"); 二、你如何理解事件 如果我們不理解事件,那我們應該理解類中的字段和屬性,那我們就從字段和屬性角度來理解事件 我們都知道對類中屬性的賦值和取值就是調用get和set方法對字段進行操作,同樣訂閱和取消訂閱一個事件時和屬性的情況一樣,實際是在調用add和remove方法,我們是對過+=和-=運算符使用委托類型的字段。 “事件”存在的的理由和“屬性”差不多,它們添加了一個封裝層,實現發布、訂閱模式。通常,我們不希望其它代碼隨意更改一個事件的處理程序,當然類能通過添加方法的方式來提供額外的訪問。 聲明一個事件後編譯器會將聲明轉換成一個具有默認add\remove實現的事件和一個私有委托類型的字段,類內的代碼能看見字段,類外的代碼只能看見事件。 這樣一來,表面上似乎能調用一個事件,,實際上是調用存儲在字段中的委托實例。 也就是說事件不是委托實例,它只是成對的add/remove方法,類似於屬性的取值和賦值方法。 下面是事件的使用:

using System;

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

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

如何理解事件和委托