匿名委託與Lambda表示式

2021-08-07 09:53:47 字數 1988 閱讀 2782

通過使用匿名委託(匿名方法),使程式設計變得更加靈活,有關委託與匿名委託請參考我的前一篇blog《委託與匿名委託》。

繼續之前示例,**如下:

static

void main(string

args)

; worker worker = new

worker();

int result = worker.handletwonumber(10, 10

,method);

console.writeline(string.format(

"result:

", result));

console.readline();

}

上述程式worker將按照main給定的引數與計算方式(method),計算出結果返回。根據等效性**可以進一步簡化,如下:

static

void main(string

args)

);console.writeline(string.format(

"result:

", result));

console.readline();

}

看到此處有過js、jquery開發經驗的朋友可能會突感親切,哦...匿名函式。在jquery中到處都用的$("#id").click(function())。

c#中對於匿名委託在使用時可以進一步精簡,再精簡的結果就變成了表示式,稱為lambda表示式。

static

void main(string

args)

;}

lambda表示式表述:

static

void main(string

args)

;}

c# lambda表示式使用 => 分為前後兩部分,(a, b) 為引數列表,為方法體。

static

void main(string

args)

);console.writeline(string.format(

"result:

", result));

console.readline();

}

下面給出方法與lambda表示式轉換對照

private

void

a1()

//lambda

()=>;

//如果方法體**只有一句,如上還可省去方法體大括號

()=>console.writeline("

....

");

private

string a2(int a, int

b) +=

", a, b, a +b);

}//如上示例可簡化為

(a,b)=>+=

", a, b, a +b);}

//因為方法體只有一句,可進一步簡化

(a,b)=> string.format("

+=", a, b, a +b);

//此時注意return應該去掉,c#編譯器自動識別=>做返回值

private

string a3(int

a)

", a);

}//上面示例可簡化為

(a)=>string.format("

", a);

//如果引數列表只有乙個引數,引數列表的()可以去掉,上面進一步簡化為

a=>string.format("

", a);

通過這篇文章你可能已經意識到在c#中,方法、委託、匿名方法,lambda表示式並無明顯區分邊界,它們之間可以靈活轉化。在實際開發中關於委託的知識點非常多,如委託與事件。如果時間允許,希望能把委託深化的文章寫一下。

匿名委託Lambda表示式

2種形式都是宣告委託的形式 2.0以前 c 命名方法是宣告委託的唯一方法 c 2.0 之後引入匿名方法 c 3.0以及更高版本中 使用lambda表示式 取代了匿名方法 作為編寫內聯 的首選方式 匿名方法 delegate void anonymity int x anonymity m anony...

Lambda表示式 匿名方法 委託

lambda表示式 匿名方法 委託 16 9 2017 代替匿名方法的簡單演示 using system using system.collections.generic using system.linq using system.text using system.threading.tasks...

委託 匿名方法 lambda表示式

使用delegate的時候很多時候沒必要使用乙個普通的方法,因為這個方法只有這個delegate會用,並且只用一次,這時候使用匿名方法最合適。匿名方法就是沒有名字的方法。mydelegate p delegate int s 在il中編譯器是給匿名方法生成了名字的 actiona1 delegate...