委託 事件 lambda linq

2021-10-04 20:25:28 字數 3289 閱讀 2624

是乙個delegate修飾的方法,

1、在il中。委託就是乙個類,繼承自乙個multicastdelegate類,裡邊有建構函式、以及invoke()、begininvoke,endinvoke等一些方法

2、委託的例項化。要求傳遞乙個引數型別。返回值都跟委託完全一致的方法。

3、委託例項的呼叫。引數和委託約束的一致。

委託這個類的例項可以放入乙個方法,例項invoke的時候執行這個方法。

委託的好處:

即增加公共邏輯方便、又邏輯分離維護簡單。

自上往下:邏輯解耦、方便維護公升級

自下往上:**重用,去掉重複**

.net framework3.0的時候出現。

action 是沒有返回引數的委託,這裡的引數最多可以寫16個引數

func是有返回值的委託,同樣是16個引數。1個返回值

在乙個方法中新增多個例項

//+=給委託的例項新增方法,會形成方法連,invoke時,會按照順序執行系列方法

action method=

this

.dosomething

method+

=this

.donothing;

method+

=new

student()

.study;

method.

invoke()

;//-=給委託的例項移除方法,從方法鏈的尾部開始匹配。遇到第乙個完全吻合的。移除。並且只移除乙個。如果沒有匹配。就啥事都不發生

action method-

=this

.dosomething

method-

=new

student()

.study;

//去不掉。原因。不同例項的相同方法。並不吻合

method.

invoke()

;

多播委託不能使用非同步方法。begininvoke(null,null);

如果多播委託想非同步執行。則需要

遍歷一下

foreach(action item in method.

getinvocationlist

())

多播委託中lambda表示式也不能去掉。因為兩個lambda表示式是兩個不同的方法。il中生成了兩個不同名字的

就是乙個帶有event關鍵字的委託,限制了許可權。只能在事件宣告類裡邊進行invoke和賦值。不允許外面、甚至子類也不可以。

委託是一種型別。事件是委託型別的乙個例項加上了event的許可權控制

student是個型別。tony就是student型別的乙個例項

事件(觀察者模式)能把固定動作和可變動作分開。完成固定動作,把可變動作分離出去

1.1

noreturn method=

newnoreturn

(this

.donothing)

; 匿名方法。delegate關鍵字

noreturn method=

newnoreturn

(delegate (int a));

lambda表示式

noreturn method=

newnoreturn

((int a)=

>);

//最終可以簡化成這樣

noreturn method= a=

>cw(***);

//

lambda表示式只是例項化委託的乙個引數,就是個方法

是匿名方法,但是編譯的時候會分配乙個名字

還會產生乙個私有的sealed類。這裡增加了乙個方法

匿名類只能初始化的時候指定他的值。而且必須初始化,之後不能進行修改。

靜態方法。靜態類。方法的第乙個引數用this,來增強方法。

1、若存在第三方的類。不適合修改原始碼,可以通過擴充套件方法增加邏輯

優先呼叫例項方法,

2、適合元件開發的擴充套件(.netcore)定義介面或者類。是按照最小需求,但是在開發的時候小一些其他方法。則可以擴充套件

3、擴充套件一些常見操作

4、會汙染基礎型別。一般少為object,沒有約束的泛型去擴充套件

public

static

class

extend

}student.ex(

);

linq to object 在enumberable類中。針對ienumberable資料,指的是記憶體資料

linq-where :把對資料過濾的通用操作完成。把可變的過濾邏輯交給委託

linq-select :把對資料過濾的通用操作完成。把可變的過濾邏輯交給委託

linq就是把對資料操作的通用部分完成。把可變的交給委託,使用者只用關心可變部分

where是一種泛型擴充套件方法,裡邊的引數是乙個func<>委託

public

static ienumerable

where

<

tsource

>

(this ienumerable

,func

bool

> p)

select是投影

public

static ienumerable

select

<

tsource,tout

>

(this ienumerable

,func selector)

skip之前必須要有orderby;

group by先按照乙個物件分組。然後插入乙個新的表。key就是這個分組的值。可以理解為

linq to sql 則是iqueryable 型別的資料。裡邊的引數是乙個表示式目錄樹包裝的乙個func委託

sql則是通過表示式目錄樹去傳遞的。將來可以通過表示式目錄樹來解析。

linq to xml封裝一下通用的對xml檔案的操作,可變的通過委託來傳遞。

iqueryable list=studentlist.

asqueryable()

;

lambda是例項化委託的快捷方式

linq是委託的封裝,邏輯解耦**重用

迭代器ienumerable中可以使用,按需獲取,

c 委託事件

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

初識委託 事件

這個是我剛入行第乙個感興趣的知識點,翻了翻不知道什麼時候記的筆記,覺得有必要把自己學的知識在梳理一遍,有一些點比當時更清晰 在這裡,先將一位大牛的部落格貼出來,有興趣的可以去看看,很詳細的介紹了委託與事件,讀了幾遍受益匪淺 c 中的委託和事件 c 中的委託和事件 續 本文例項是在vs2013下實現的...

C 委託事件

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