C 從委託 匿名方法到Lambad表示式

2021-09-29 18:40:51 字數 1797 閱讀 6470

.net framework1.0引入了委託,.netframework2.0引入了匿名方法,.netframework3.0引入lambad表示式

匿名方法是通過使用 delegate 關鍵字建立委託例項來宣告的,可以使用來初始化命名委託,所以說匿名方法是乙個委託的例項,lambad表示式也是乙個匿名方法,所以lambad表示式也是個委託例項

委託到lamba表示式的演變,先定義乙個show方法:

public void show(int id, string name)

的id是 ");

}

.net framework1.0 或1.1的例項化委託要指定方法名稱,在委託呼叫時要先宣告乙個方法,例如show方法

//.netframework1.0  1.1

noreturnnoparameter noparamethod = new noreturnnoparameter(this.show);

noparamethod.invoke();

noparamethod();//invoke與直接呼叫一樣

到 .net framework2.0 時有了匿名方法,可以不先宣告方法,而直接用匿名方法

noreturnwithparameter paramethod = new noreturnwithparameter(delegate (int x, string y)

's id is ");

});paramethod.invoke(202, "emma");

到了 .net framework3.0 把delegate關鍵字去掉,增加了乙個箭頭goes to,就是lambda表示式 引數列表=>方法體

//.netframework3.0   把delegate關鍵字去掉,增加了乙個箭頭goes to

//lambda表示式 引數列表=>方法體

noreturnwithparameter paramethod = new noreturnwithparameter(

(int x, string y) =>

's id is ");

});paramethod.invoke(303, "jennifer");

還可以進一步省略匿名方法的引數型別,這是編譯器的語法糖,雖然沒寫,編譯時還是有的,根據委託推算出來

noreturnwithparameter paramethod = new noreturnwithparameter(

(x, y) =>

's id is ");

});paramethod.invoke(404, "daisy");

new noreturnwithpara可以省掉,也是語法糖,編譯器自動加上

noreturnwithparameter paramethod = (x, y) =>

's id is ");

};paramethod.invoke(505, "bonnie");

如果方法體只有一行,可以去掉大括號,一是一般情況下看到的lambda表示式,如果方法體有多行還是要大括號

noreturnwithparameter paramethod = (x, y) => console.writeline($"'s id is ");

paramethod.invoke(606, "elizabeth");

總結

表示式就是乙個方法,只是改變了語法的書寫方式而已

參考

匿名方法,lambad表示式,匿名類

其實lambad表示式就是 函式 或者說是 方法 寫法的乙個進化,越來越簡化而已,如數學方法裡的f x 匿名方法 顧名思義,匿名方法就是沒有名稱的方法,但是有定義引數。匿名方法最明顯的好處就是可以降低另寫乙個方法的工作量 另外乙個好處就是可以訪問呼叫者的變數,降低傳引數的複雜度。匿名方法不是乙個事先...

C 委託 使用匿名方法

使用c 委託還有另一種重要方法 通過匿名方法。其中,匿名方法是用作委託引數的乙個 塊。請看下面的例子 匿名方法的作用是使 更簡化,方便了程式設計師。如果沒有匿名方法,則定義一套事件監聽需要這樣 class program 一般來說,定義的myeventhandler方法只用來響應事件,只在上面那一處...

C 委託 使用匿名方法

使用c 委託還有另一種重要方法 通過匿名方法。其中,匿名方法是用作委託引數的乙個 塊。請看下面的例子 匿名方法的作用是使 更簡化,方便了程式設計師。如果沒有匿名方法,則定義一套事件監聽需要這樣 class program 一般來說,定義的myeventhandler方法只用來響應事件,只在上面那一處...