c 工廠模式 ,委託 ,事件。

2022-03-13 15:59:58 字數 2238 閱讀 8562

有些時間 不用 c#了 ,想 寫 委託 和 事件 又會 卡下 ,之前也沒認真總結過。乾脆 做個小結 。

什麼是委託:狹義,不安全函式的指標。不安全在**: 任何地方都可以呼叫委託物件。(實際上委託物件才是函式的指標,而delegate只是乙個語法

什麼是事件:狹義,安全的函式指標,安全在**:只允許包含事件的類,的內部呼叫。

聯絡和區別:

delegate關鍵字模擬於class關鍵字, 定義的是一種委託型別,需要再建立委託物件.

用event關鍵字來修飾建立委託物件行為,那麼就成了乙個特殊的委託物件,就是事件 。

所以delegate是類,event是修飾語,好比private.

光板 delegate物件,可以到處呼叫它。event 修飾的delegate物件,只能在  「event 修飾的delegate物件」 所屬類中使用。

還有一點語法糖,event只允許+=,而不支援=.因為=,可能會在你需要新增的時候,寫成=,會覆蓋掉之間的方法。

寫完,終於感覺好點了。 

委託 :

1.概念:個人 理解 ,加強版的 函式指標,可以存放多個函式 指標 ,算是函式指標集合。但是提供了非同步的高階特性(另開乙個執行緒去呼叫這個函式指標)

2。 用途:需要對某個方法進行多型或延遲執行的情況下。表現在某個固定模組,先寫好函式意圖,實現由模組外定義和修改。而固定模組不修改**。

但會導致同樣滿足要求的工廠模式亂入,區分,工廠模式是在物件級別的延遲和多型。而委託是方法級別的延遲和多型。

3.常用用法舉例:處理訊息模組(固定模組),模組編寫處理流程。具體哪個方法處理或哪幾個方法處理 ,由外部定義實現 。

4.缺點:委託無限制,可以直接在任何地方,使用委託物件,進行呼叫。而事件,限制在包含事件的類內部。

4.簡介使用:乙個類a裡面定義delegate,並定義delegate物件,那麼類a的方法funb就可以把delegate物件當作函式一樣呼叫。

主函式 給 類a的物件中的delegate物件,附加上和delegate原型相同的函式名func。那麼主函式,就可以呼叫a的方法funb。 而最終是呼叫附加上的func方法。

class kernelmodule//

固定模組,內部成員必須要有委託(函式指標),來表達意圖,而實現來自於外部。

}

public

void

callbacka(system.iasyncresult iar)

}class

program

static

string pmsg2(string msg)//

意圖的實現2

static

void main(string

args)

}

2.事件

概念:對委託的例項化提供了一些限制的一種語法 。public event pmsghandle imphandle    public  pmsghandle imphandle 。2個語句。都是生產委託物件。但是加了event後。這個物件進行了一些安全操作限制。

用途:跟委託一樣。

小結:外部呼叫事件,會有編譯錯誤。kernelmodule.imphandle」只能出現在 += 或 -= 的左邊(從型別「kernelmodule」中使用時除外)

舉例:

class kernelmodule//

固定模組,內部成員必須要有委託(函式指標),來表達意圖,而實現來自於外部。

}

public

void

callbacka(system.iasyncresult iar)

}class

program

static

string pmsg2(string msg)//

意圖的實現2

static

void main(string

args)

}

c 委託事件

1,什麼是委託 委託是什麼?從生活理解就像是你是乙個c 程式設計師,你對c 並不了解,當需要進行c 分析的時候你委託給你的一位懂c 的同事幫你來完成 在c 中,委託的作用是這樣描述的 委託就像乙個函式的指標,在程式執行時可以使用它們來呼叫不同的函式。簡單點說,委託能夠引用函式,通過傳遞位址的機制完成...

C 委託事件

一 委託 委託類似於函式指標,但函式指標只能引用靜態方法,而委託既能引用靜態方法,也能引用例項方法。委託使用分三步 1 委託宣告。2 委託例項化。3 委託呼叫。例程一 程式 using system namespace 委託 private int add int num1,int num2 例中,...

C 委託事件

1 namespace222 2324 25 26 建立執行方法 27 28 29 30 31static int stratrun int count,int num count num 3233 34 35 第一步宣告委託 36 37 計算前的總數 38 數字39 計算後的總數 40public...