我是如何理解delegate和event的

2021-10-11 06:53:41 字數 3330 閱讀 6417

委託非同步方式

event

在以前我學習c#時,有一天看到了delegate,發現這玩意挺好用,和函式指標一樣,之後又出來了個event,我當時真的沒明白為什麼需要這個event,有點畫蛇添足。

delegate英文直譯委託,理解它其實很簡單,在理解它之前,我們看看如何使用它。

首先我們需要宣告乙個委託

宣告委託其實和宣告函式是一樣的,唯一的區別在於前面多了個delegate關鍵字(雖然c#裡沒法單純的宣告函式)。

學過c的小夥伴可以把它當做乙個函式指標宣告。

delegate

void

mydelegate

(string str)

;

我們使用類建立物件的時候是類名 變數名 = new 類名

使用委託時也是一樣,不過它和c#中對類建立物件不同,它具有顯式隱式兩種方式使用。

using system;

namespace example

static

void

main

(string

args)

}}

上面的栗子會輸出:

hello

hi

你以為它只能充當函式指標或者匿名函式的功能那可就錯了,它可以不停的加入新的function(也可以移除),這玩意還能這樣用:

using system;

namespace example

static

void

testfunc2

(string str)

我是2號"

,str);}

static

void

main

(string

args)

}}

上面的栗子會輸出:

hello

hello 我是2號

funcaction是c#中宣告好的泛型委託,為了我們使用方便。其定義如下:

public

delegate tresult func

,out

tresult

>

(t arg)

;//以此類推

public

delegate tresult func

<

int1,in

t2,outtresult

>

(t1 arg1,

t2 arg2)

;public

delegate

void

action

>

(t obj)

;//以此類推

public

delegate

void

action

<

int1,in

t2>

(t1 arg1,

t2 arg2)

;

可以看見func其實就是帶返回值得委託,action無返回值的委託。

使用栗子:

using system;

namespace example

static

void

myaction

(string str)

",str);}

static

void

main

(string

args)

}}

上面的栗子會輸出:

傳給我的是10
委託還可以非同步執行,但是需要注意:非同步執行委託只能有乙個目標,不能+=新增多個目標。

使用:

using system;

namespace example

static

void

main

(string

args)}}

}

using system;

namespace example

static

void

oncallback

(iasyncresult res)

static

void

main

(string

args)

}}

當時看到event時,我覺得這是個畫蛇添足的東西,因為單純的delegate已經能用,為什麼要用event delegate

使用event是為了封裝性,讓其在外部只能新增或移除,但是無法在類外直接呼叫,僅僅就是這個作用而已。

using system;

namespace example

}class

observer

public

void

notify

(string str)

", str,

this

.name);}

}}

使用:

namespace example

}}

上面的栗子會輸出:

哈嘍 1號觀察者

哈嘍 2號觀察者

哈嘍 3號觀察者

哈嘍 4號觀察者

哈嘍 5號觀察者

我理解的委託 delegate

2 主體內申明使用 的方法 public void myfunction 被附體的 申明 被附體的方法 準備二 1 主體外寫準備附體的方法,上面申明的引數和返回值一致 private void 準備附體的方法1 int inttemp 你也可以這樣申明 private void 準備附體的方法2 i...

C 我理解的委託Delegate

一直以為委託很難,可能是自己太菜,覺得很不好理解。直到我今天需要將方法作為乙個引數傳遞,我才有興趣去看委託怎麼用。先說定義 委託是使用者自定義的類,它定義了方法的型別。儲存的是一系列具有相同引數和返回型別方法的位址列表,呼叫委託時,此委託列表的所有方法都將被執行。我理解的很直白的說,委託就是乙個中間...

我是如何理解人脈的

上了大學之後,發現身邊乙個神奇的現象 原來 兩耳不聞窗外事一心唯讀聖賢書 的窮酸學生,一旦進入了大學的校門,竟在一夜之間變成了張口人脈 閉口關係的小大人模樣,彷彿不認識幾個學生會幹部 不參加幾個社團都不好意思見人了。這也難怪,在大學這個小社會裡,大到學生幹部的選拔 獎學金助學金的評選,小到舍友之間的...