国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

C#中Action與delegate、EventHandler的差異

2019-11-14 14:03:52
字體:
來源:轉載
供稿:網友

Action是一個泛型的委托,其內部即使用delegate去實現,當普通的delegate定義的參數與Action個數、類型一致時,兩者實現的功能是一樣的。只是Action的方式更加簡潔、規范。如下:

 1         public delegate void DoDelegate(object parm); 2         public DoDelegate DoMethod; 3  4         public Action<object> doAction4OneParm; 5         public Action<object, object> doAction4TwoParm; 6  7         PRivate void Form1_Load(object sender, EventArgs e) 8         { 9             DoMethod += DoTestMetohd;  //普通委托(由于委托定義時給定一個參數,故此處匹配一個參數的方法)10             doAction4OneParm += DoTestMetohd;  //Action委托(此處匹配一個參數的方法)11             doAction4TwoParm += DoTestMetohd;  //Action委托(此處匹配兩個參數的方法)12         }13 14         private void DoTestMetohd(object parm)15         {16             MessageBox.Show(Convert.ToString(parm));17         }18 19         private void DoTestMetohd(object parm1, object parm2)20         {21             MessageBox.Show(Convert.ToString(parm1 + " " + parm2));22         }

而Action與delegate更重要的一個區別在于泛型,即Action的內部使用了泛型+委托,且泛型的方法的參數個數可擴展到16個,微軟.net corefx中定義的Action內部代碼如下:

 1 namespace System 2 { 3     [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1005:AvoidExcessiveParametersOnGenericTypes")] 4     public delegate void Action<in T1, in T2, in T3, in T4, in T5, in T6, in T7, in T8, in T9>(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9); 5  6     [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1005:AvoidExcessiveParametersOnGenericTypes")] 7     public delegate void Action<in T1, in T2, in T3, in T4, in T5, in T6, in T7, in T8, in T9, in T10>(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9, T10 arg10); 8  9     [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1005:AvoidExcessiveParametersOnGenericTypes")]10     public delegate void Action<in T1, in T2, in T3, in T4, in T5, in T6, in T7, in T8, in T9, in T10, in T11>(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9, T10 arg10, T11 arg11);11 12     [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1005:AvoidExcessiveParametersOnGenericTypes")]13     public delegate void Action<in T1, in T2, in T3, in T4, in T5, in T6, in T7, in T8, in T9, in T10, in T11, in T12>(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9, T10 arg10, T11 arg11, T12 arg12);14 15     [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1005:AvoidExcessiveParametersOnGenericTypes")]16     public delegate void Action<in T1, in T2, in T3, in T4, in T5, in T6, in T7, in T8, in T9, in T10, in T11, in T12, in T13>(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9, T10 arg10, T11 arg11, T12 arg12, T13 arg13);17 18     [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1005:AvoidExcessiveParametersOnGenericTypes")]19     public delegate void Action<in T1, in T2, in T3, in T4, in T5, in T6, in T7, in T8, in T9, in T10, in T11, in T12, in T13, in T14>(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9, T10 arg10, T11 arg11, T12 arg12, T13 arg13, T14 arg14);20 21     [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1005:AvoidExcessiveParametersOnGenericTypes")]22     public delegate void Action<in T1, in T2, in T3, in T4, in T5, in T6, in T7, in T8, in T9, in T10, in T11, in T12, in T13, in T14, in T15>(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9, T10 arg10, T11 arg11, T12 arg12, T13 arg13, T14 arg14, T15 arg15);23 24     [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1005:AvoidExcessiveParametersOnGenericTypes")]25     public delegate void Action<in T1, in T2, in T3, in T4, in T5, in T6, in T7, in T8, in T9, in T10, in T11, in T12, in T13, in T14, in T15, in T16>(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9, T10 arg10, T11 arg11, T12 arg12, T13 arg13, T14 arg14, T15 arg15, T16 arg16);26 }

EventHandler是一個事件委托,即內部也采用委托來實現,但其更多的時候被定義成event,即事件的方式來使用。

以上純個人在使用中的觀點,歡迎指正批評!!!


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 宜兰市| 乐都县| 邵武市| 宾川县| 容城县| 稷山县| 通山县| 台山市| 宁都县| 四子王旗| 西盟| 连平县| 平陆县| 江口县| 呼图壁县| 隆安县| 绿春县| 东城区| 德清县| 鹤山市| 邹平县| 会理县| 武清区| 阿荣旗| 平顺县| 红桥区| 梧州市| 岢岚县| 南开区| 谷城县| 富裕县| 宕昌县| 天门市| 青海省| 红河县| 轮台县| 太原市| 清苑县| 苏尼特右旗| 宽甸| 澎湖县|