Actiion Func ;Donet framework 中已经定义好的委托

在项目开发中特别是多线程项目中时常用到委托,通常情况下我们自己定义我们自己的委托,其实系统已经为我们定义好了大部分功能都能用上的委托,如下

希望对大家有所帮助

Donet framework 中定义的委托:

 

一:Action 与 Action<T>
            Action 委托
            封装一个方法,该方法不具有参数并且不返回值。
            命名空间:  System
            程序集:  mscorlib(在 mscorlib.dll 中)
            语法: public delegate void Action()
 
          Action<T> 委托
         封装一个方法,该方法只有一个参数并且不返回值。 
           命名空间:  System
           程序集: mscorlib(在 mscorlib.dll 中)
           语法: public delegate void Action<in T>(T obj)

      Action 委托例子  REF ADDR:http://msdn.microsoft.com/zh-cn/library/system.action.aspx
    public class Anonymous
  {
   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>

Func<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.");
   }
}

Func<TTResult> 委托

封装一个具有一个参数并返回 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

   

posted @ 2012-07-24 00:37  Chester.Y.Zhang  阅读(226)  评论(0编辑  收藏  举报