zoukankan      html  css  js  c++  java
  • 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
    
    
       

  • 相关阅读:
    object引入出现滚动条问题
    java
    读大道至简有感
    读大道至简第二章有感
    加和程序的流程图及代码
    Unity编程标准导引Unity中的基本概念2.1界面概览
    Unity编程标准导引2.2Unity中的基本概念
    Unity编程标准导引3.1 Component 组件脚本及其基本生命周期
    Unity编程标准导引3.2 MonoBehavior 组件父类重构
    Unity编程标准导引1.1下载和安装Unity
  • 原文地址:https://www.cnblogs.com/beixing/p/2605818.html
Copyright © 2011-2022 走看看