C# Action<T> 委托

简介:

         封装一个方法,该方法只有一个参数并且不返回值。可以使用 Action< T> 委托以参数形式传递方法,而不用显式声明自定义的委托。封装的方法必须与此委托定义的方法相对应。 即封装的方法必须具有一个通过值传递给它的参数,并且不能返回值。 Action<T1,T2 ......> 委托还可以多个参数传入。如果有返回值,则使用Fun<T, TResult>。

 

介绍:

 

public delegate void Action<in T>( T obj )

类型参数 in T

此委托封装的方法的参数类型。

参数 obj

类型:T,此委托封装的方法的参数。

 

使用:

在使用 Action< T> 委托时,不必显式定义一个封装只有一个参数的方法的委托。

1. 声明了一个名为 DisplayMessage 的委托,并将对 WriteLine 方法或 ShowWindowsMessage 方法的引用分配给其委托实例。

using System;
using System.Windows.Forms;

//声明委托
delegate void DisplayMessage(string message);

public class TestCustomDelegate
{
   public static void Main()
   {
      //实例化委托
      DisplayMessage messageTarget; 

      //分配委托
      if (Environment.GetCommandLineArgs().Length > 1)
         messageTarget = ShowWindowsMessage;
      else
         messageTarget = Console.WriteLine;

      messageTarget("Hello, World!");   
   }      

   private static void ShowWindowsMessage(string message)
   {
      MessageBox.Show(message);      
   }
}

 

2.实例化 Action< T> 委托,而不是显式定义一个新委托并将命名方法分配给该委托。

using System;
using System.Windows.Forms;

public class TestAction1
{
   public static void Main()
   { 
      //实例化Action委托
      Action<string> messageTarget; 

      //直接分配
      if (Environment.GetCommandLineArgs().Length > 1)
         messageTarget = ShowWindowsMessage;
      else
         messageTarget = Console.WriteLine;

      messageTarget("Hello, World!");   
   }      

   private static void ShowWindowsMessage(string message)
   {
      MessageBox.Show(message);      
   }
}

 

3.Action< T> 委托与匿名方法一起使用。

using System;
using System.Windows.Forms;

public class TestAnonMethod
{
   public static void Main()
   {
      //实例化Action委托
      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);      
   }
}

 

4.lambda 表达式分配给 Action< T> 委托实例。

using System;
using System.Windows.Forms;

public class TestLambdaExpression
{
   public static void Main()
   {
      //实例化委托
      Action<string> messageTarget; 

      //通过lambda表达式分配给委托
      if (Environment.GetCommandLineArgs().Length > 1)
         messageTarget = s => ShowWindowsMessage(s); 
      else
         messageTarget = s => Console.WriteLine(s);

      messageTarget("Hello, World!");
   }

   private static void ShowWindowsMessage(string message)
   {
      MessageBox.Show(message);      
   }
}

 

5.ForEach 和 ForEach< T> 方法都采用Action< T> 委托作为参数。通过使用由委托封装的方法,可以对数组或列表中的每个元素执行操作。

using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        List<String> names = new List<String>();
        names.Add("Bruce");
        names.Add("Alfred");
        names.Add("Tim");
        names.Add("Richard");

        // 使用Print方法显示列表的内容
        names.ForEach(Print);

        // 通过匿名方法显示列表的内容
        names.ForEach(delegate(String name)
        {
            Console.WriteLine(name);
        });
    }

    private static void Print(string s)
    {
        Console.WriteLine(s);
    }
}

 

  • 8
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值