W3Cschool
恭喜您成為首批注冊(cè)用戶(hù)
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
委托類(lèi)型可以包含通用類(lèi)型參數(shù)。例如:
public delegate T Converter<T> (T arg);
有了這個(gè)定義,我們可以編寫(xiě)一個(gè)適用于任何類(lèi)型的通用方法:
public class Util { public static void Process<T> (T[] values, Converter<T> t) { for (int i = 0; i < values.Length; i++) values[i] = t (values[i]); } } class Main { static void Main() { int[] values = { 1, 2, 3 }; Util.Process (values, Square); // Hook in Square foreach (int i in values){ Console.Write (i + " "); // 1 4 9 } } static int Square (int x) { return x * x; } }
使用通用委托,我們可以寫(xiě)一小組委托類(lèi)型來(lái)覆蓋任何返回類(lèi)型和任意數(shù)量的參數(shù)的方法。
這些委托是Func
和Action
委托,在系統(tǒng)命名空間中定義:
delegate TResult Func <out TResult> (); delegate TResult Func <in T, out TResult> (T arg); delegate TResult Func <in T1, in T2, out TResult> (T1 arg1, T2 arg2);
...等等,直到 T16
delegate void Action (); delegate void Action <in T> (T arg); delegate void Action <in T1, in T2> (T1 arg1, T2 arg2);
...等等,直到 T16
這些代表可以覆蓋幾乎所有的方法。
以下代碼顯示了如何使用Func
委托,該委托接受T類(lèi)型的單個(gè)參數(shù)并返回相同類(lèi)型的值:
public static void Process<T> (T[] values, Func<T,T> transformer) { for (int i = 0; i < values.Length; i++) values[i] = transformer (values[i]); }
這些代理沒(méi)有涉及的唯一實(shí)際場(chǎng)景是ref
/out
和指針參數(shù)。
代理類(lèi)型彼此不兼容,即使它們的簽名相同。
如果它們以相同的順序引用相同的方法,則多播委托被認(rèn)為是相等的。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話(huà):173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: