通過使用匿名委託(匿名方法),使程式設計變得更加靈活,有關委託與匿名委託請參考我的前一篇blog《委託與匿名委託》。
繼續之前示例,**如下:
staticvoid 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),計算出結果返回。根據等效性**可以進一步簡化,如下:
staticvoid main(string
args)
);console.writeline(string.format(
"result:
", result));
console.readline();
}
看到此處有過js、jquery開發經驗的朋友可能會突感親切,哦...匿名函式。在jquery中到處都用的$("#id").click(function())。
c#中對於匿名委託在使用時可以進一步精簡,再精簡的結果就變成了表示式,稱為lambda表示式。
staticvoid main(string
args)
;}
lambda表示式表述:
staticvoid main(string
args)
;}
c# lambda表示式使用 => 分為前後兩部分,(a, b) 為引數列表,為方法體。
staticvoid main(string
args)
);console.writeline(string.format(
"result:
", result));
console.readline();
}
下面給出方法與lambda表示式轉換對照
privatevoid
a1()
//lambda
()=>;
//如果方法體**只有一句,如上還可省去方法體大括號
()=>console.writeline("
....
");
privatestring 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#編譯器自動識別=>做返回值
privatestring 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...