c# 從1.x 發展到目前的 4.5,委託的寫法真是越來越簡單精悍。如果您對這些委託的寫法不是很清晰,本文可以幫助到您。
委託是一種安全封裝方法的型別,可以將方法作為方法的引數。
委派方法的引數個數、順序、型別及方法返回值型別必須跟定義的委託方法一樣,但引數名稱可以不同。
1、c# 定義乙個完整委託:
delegate輸出結果:"hello 委託"string saymessage(string
msg);
static
string sayhello(string
name)
", name);
}static
void main(string
args)
2、c#2.0後出現了匿名方法,可以將委託方法省略掉,直接給委託傳遞乙個匿名方法,當然也要去掉new這個動作。
delegate輸出結果:"hello 匿名方法"string saymessage(string
msg);
static
void main(string
args)
", name);
};console.writeline(say(
"匿名方法
"));
console.readkey();
}
3、 聰明的人們總是想使用更少的**達到相同的效果。因此c#3.0 之後出現了 lambda表示式、action委託、func 委託
(1) lambda表示式:匿名方法的公升級版,可以簡化匿名方法的寫法。寫法 (形參列表)=>
delegate輸出結果:"hello lambda"string saymessage(string
msg);
static
void main(string
args)
", name);
};console.writeline(say(
"lambda
"));
console.readkey();
}
通過看上面的**,能否將定義的委託 saymessage 也去掉嗎?當然可以,用 func委託 或者 action委託 就可以取代它!
(2)func 委託:當我們封裝乙個具有返回值方法的時候就可以使用func委託。
func 委託一共有 15種過載,但總會有乙個返回值,比如我們示例中用到的func委託就是其中之一。
封裝乙個具有乙個t型別引數並返回 tresult 型別值引數的方法。
如果封裝方法沒有有輸入引數則直接使用func委託。
static輸出結果:"hello func 委託"void main(string
args)
", name);
};//
和lambda 結合
func say2 = (name) =>
", name);
};console.writeline(say1(
"func 委託
"));
console.writeline(say2(
"func 委託
"));
console.readkey();
}
(3)action委託:當我們封裝乙個沒有返回引數的方法時,就可以使用action委託。
action委託也有 15種過載,封裝的方法可有有輸入引數,但不會有返回引數。
封裝乙個具有t型別引數且無返回值引數 的方法。
如果封裝方法沒有輸入引數則可以直接使用 action 委託。
static輸出結果:"hello action 委託"void main(string
args)
", name));
};//
和lambda 結合
action say2 = (name)=>
", name));
};say1(
"action 委託");
say2(
"action 委託");
console.readkey();
}
JAVA從入門到精通(4)
一 條件語句之if 語法 if 條件 解釋 需要先判斷條件,條件滿足後才執行後續的 注 如果if條件成立時的執行語句只有一條,是可以省略大括號的 但是執行語句有多條,那就不可以省略了。二 條件語句之if.else 語法 if 條件的布林表示式 else 解釋 條件成立時,則執行if部分的 塊 條件不...
MakeFile從入門到精通 4
makefile 變數 變數在makefile中大量使用,使得makefile更加靈活功能更加強大。同時造成了讀makefile更加難讀。所以我們要發點時間學學變數。變數基礎 變數分類 變數追加,條件賦值 目標變數 模式變數 自動變數 系統環境變數 變數傳遞 一般在makefile裡面的變數都是存的...
Java從漢字到拼音 pinyin4j使用
有時候,我們需要將漢字轉化成拼音,以方便查詢,如圖書系統中用拼音檢索書籍,以及通訊錄中快速查詢聯絡人等。乙個方法是使用map容器對,將漢字與拼音對應,如 中 對應 zhong 但由於map的自身限制,在多音字如 重 可對應 chong zhong 這時候就會出現問題。pinyin4j就是為了解決類似...