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