作者:余小章 's 7 年以前
827
Predicate 就是:一個委派,需傳入一個參數型別為 T ,回傳值型別為 bool 。
public delegate bool Predicate
沒有回傳值,預設支援16個參數
有回傳值,預設支援16個參數,最後一個TResult是回值的型態
Lambda
Action Lambda (input parameters) => {expression}
若參數只有一個,()可以省略,如下列範例所示: x => y.Length > x
匿名方法若只有一行,{}可以省略,下列範例所示: (x,y) => y.Length > y
{}內要寫要做的事,如下列範例所示: (x,y) => {y.Length > x;}
例如:Action
Func Lambda (input parameters) => {expression:return result}
Func<int, string, bool> funcLambda = (x, y) => { return y.Length > x; };
bool result = funcLambda.Invoke(1, "123456");
under line是合法的變數命名規則,因為 Lambda 讓以下代碼看起來在開玩笑 _ => y <= _
若參數只有一個,()可以省略,如下列範例所示: x => y.Length > x
匿名方法若只有一行,{}可以省略,return可以省略,如下列範例所示: (x,y) => y.Length > y
{}內要寫要做的事並有回傳值,如下列範例所示: (x,y) => {return y.Length > x;}
例如:Func
由委派 delegate 演變而來
C#3.0,不需要使用delegate,把它換成 (input parameters) => {expression}
Func<int, string, bool> funcLambda = (x, y) => { return y.Length > x; };
bool result = funcLambda.Invoke(1, "123456");
MessageBox.Show(result.ToString());
=>右邊,代表匿名方法的內容。
=>左邊,代表匿名方法的參數。
=>,代表這是個匿名方法。可以想像成宣告為delegate的匿名方法。意義是goes to,也就是把=>左邊的參數,交給=>右邊的運算式或陳述式執行。
方法體只有一行時 {} 可以省略
{} 方法體,方法要處理的內容
參數只有一個時()可以省略
() 方法的參數
Sample:SimpleLambda
實體化 delegate,不需要用new,直接將方法體指派給 delegate
方法體不需具名(匿名方法)
可以不需要定義 delegate 簽章
一個Invoke可觸動多個動作
若需要多個動作則註冊+=,反之調用-=
調用Invoke
實體化時將方法體傳入 delegate 建構函式
定義方法
定義delegate簽章
C#1.0,定義 Delegate 和 Method,兩者都要具名定義,簽章(參數)也要相同
取消後又再重做
取消(如果該物件有實作的話)
重複多次