在项目开发中特别是多线程项目中时常用到委托,通常情况下我们自己定义我们自己的委托,其实系统已经为我们定义好了大部分功能都能用上的委托,如下
希望对大家有所帮助
Donet framework 中定义的委托:
{ public static void Main() { Name testName = new Name("Koani"); Action showMethod = delegate() { testName.DisplayToWindow();} ; showMethod(); } }
Action<T>委托例子 REF ADDR:http://technet.microsoft.com/zh-CN/library/018hxwa8
using System; using System.Windows.Forms; public class TestAnonMethod { public static void Main() { Action<string> messageTarget; if (Environment.GetCommandLineArgs().Length > 1) messageTarget = delegate(string s) { ShowWindowsMessage(s); }; else messageTarget = delegate(string s) { Console.WriteLine(s); }; messageTarget("Hello, World!"); } private static void ShowWindowsMessage(string message) { MessageBox.Show(message); } }
以上为.net framework 2.0以上版本都支持
Action<T1, T2> , Action<T1, T2, T3> , Action<T1, T2, T3, T4> 委托
Action<T1,T2>例子:http://msdn.microsoft.com/zh-cn/library/bb549311
Action<T1, T2, T3> 例子:http://msdn.microsoft.com/zh-cn/library/bb549392
Action<T1, T2, T3, T4> 例子:http://msdn.microsoft.com/zh-cn/library/bb548654
以上的委托在.net framework 3.5 以上版本都支持,2.0的版本不支持
现在Action委托已经到可以拥有16个输入参数,不过从5个参数到16个参数这些Action只有在.net framework 4.0 以上的版本才支持
例子请参考 http://msdn.microsoft.com/zh-cn/library/system.action
------------------------------------huali de fengexian------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------------------------
二:Func<TResult> 与 Fun<T,TResult>
封装一个不具有参数但却返回 TResult 参数指定的类型值的方法。
命名空间: System
程序集: mscorlib(在 mscorlib.dll 中)
语法:public delegate TResult Func<out TResult>()
Func<TResult> 例子: ERF ADDR:http://msdn.microsoft.com/zh-cn/library/bb534960.aspx
public class Anonymous { public static void Main() { OutputTarget output = new OutputTarget(); Func<bool> methodCall = delegate() { return output.SendToFile(); }; if (methodCall()) Console.WriteLine("Success!"); else Console.WriteLine("File write operation failed."); } }
封装一个具有一个参数并返回 TResult 参数指定的类型值的方法。
命名空间: System
程序集: mscorlib(在 mscorlib.dll 中)
语法:public delegate TResult Func<in T, out TResult>(T arg)Func<T,TResult>例子: REF ADDR : http://msdn.microsoft.com/zh-cn/library/bb549151.aspx
using System; public class GenericFunc { public static void Main() { // Instantiate delegate to reference UppercaseString method Func<string, string> convertMethod = UppercaseString; string name = "Dakota"; // Use delegate instance to call UppercaseString method Console.WriteLine(convertMethod(name)); } private static string UppercaseString(string inputString) { return inputString.ToUpper(); } }
using System; public class Anonymous { public static void Main() { Func<string, string> convert = delegate(string s) { return s.ToUpper();}; string name = "Dakota"; Console.WriteLine(convert(name)); } }
framework 3.5 4.0 :(0-4个输入参数)
public delegate TResult Func<out TResult>()
public delegate TResult Func<in T, out TResult>(T arg)
public delegate TResult Func<in T1, in T2, out TResult>(T1 arg1,T2 arg2)
…………
public delefate TResult Func<in T1,in T2,in T3,in T4,out TResult>(T1 arg1,T2 arg2,T3 arg3 T4 arg4) 四个输入参数
framework 4.0 :支持上边的以外 还支持 到 十六个输入参数
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 ) 见:http://msdn.microsoft.com/zh-cn/library/bb534303