型別參數僅在特定方法需要時宣告於方法名稱後:
void PushMultiple<T>(Stack<T> stack, params T[] values) {
foreach (T v in values) stack.Push(v);
}
// 呼叫:型別推斷自動解析 T
Stack<int> s = new Stack<int>();
PushMultiple(s, 1, 2, 3); // 等同 PushMultiple<int>(s, 1, 2, 3)
推斷規則:從實參型別反推型別參數,支援多態、介面、委派等複雜情境。
delegate (parameters) { statements }
out 參數void,匿名方法無 return 或僅 return;return expr 可隱式轉換至委派型別允許直接以方法群組賦值給委派:
btn.Click += Handler; // 等同 new EventHandler(Handler)
Apply(data, Math.Sin); // 等同 new Function(Math.Sin)
編譯器自動推斷目標委派型別並建立實例。影響多載解析,不參與型別推斷。
yield return 產生序列下一值yield break 終止序列IEnumerator/IEnumerable 或泛型版本public IEnumerator<T> GetEnumerator() {
for (int i = count - 1; i >= 0; --i)
yield return items[i];
}
public IEnumerable<T> TopToBottom {
get { return this; } // 自身即可列舉
}
public IEnumerable<T> BottomToTop {
get {
for (int i = 0; i < count; i++)
yield return items[i];
}
}
IEnumerable<int> e = FromTo(1, 10);
foreach (int x in e) {
foreach (int y in e) { // 巢狀列舉,各自獨立
Console.Write(x * y);
}
}
每次 GetEnumerator 產生新列舉器,擁有參數獨立拷貝,互不干擾。
public partial class Customer { ... } // File1
public partial class Customer { ... } // File2
// 編譯合併
partial 緊鄰 class/struct/interface