是乙個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 例中,...