博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Action<T> Delegate
阅读量:5060 次
发布时间:2019-06-12

本文共 3639 字,大约阅读时间需要 12 分钟。

来源:https://docs.microsoft.com/zh-cn/dotnet/api/system.action-1?view=netframework-4.7.2

Action<T> Delegate

定义

封装一个方法,该方法只有一个参数并且不返回值。

C#复制
public delegate void Action
(T obj);

类型参数

T

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

参数

obj

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

继承
Action<T>

示例

下面的示例演示如何将要打印的内容委托对象。 在此示例中,Print方法用于向控制台显示列表的内容。 此外,C# 示例还演示如何使用匿名方法来将内容显示到控制台。 请注意,该示例不显式声明变量。 相反,它将传递到方法采用单个参数和与未返回到的值的引用方法,其单个参数是委托。 同样,在 C# 示例中,委托不显式实例化,因为匿名方法的签名匹配的签名委托所需的方法。

C#复制
using System;using System.Collections.Generic;class Program{    static void Main() { List
names = new List
(); names.Add("Bruce"); names.Add("Alfred"); names.Add("Tim"); names.Add("Richard"); // Display the contents of the list using the Print method. names.ForEach(Print); // The following demonstrates the anonymous method feature of C# // to display the contents of the list to the console. names.ForEach(delegate(String name) { Console.WriteLine(name); }); } private static void Print(string s) { Console.WriteLine(s); } } /* This code will produce output similar to the following: * Bruce * Alfred * Tim * Richard * Bruce * Alfred * Tim * Richard */

注解

可以使用委托作为参数传递方法,而无需显式声明自定义委托。 封装的方法必须对应于此委托定义的方法签名。 这意味着,封装的方法必须具有按值传递给它的一个参数,并且不能返回值。 (在 C# 中,该方法必须返回void。 在 Visual Basic 中,它必须由定义Sub...End Sub 构造。 它也可以是返回一个值,则忽略该值的方法。)通常情况下,这种方法用于执行操作。

 备注

若要引用的方法,具有一个参数并返回一个值,请使用泛型改为委托。

当你使用委托时,您无需显式定义用于封装具有单个参数的方法的委托。 例如,下面的代码显式声明名为的委托DisplayMessage,并将分配到的引用方法或ShowWindowsMessage给其委托实例的方法。

C#复制
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); } }

下面的示例简化了此代码实例化而不是显式定义一个新委托,并为其赋值命名的方法的委托。

C#复制
using System;using System.Windows.Forms;public class TestAction1 { public static void Main() { Action
messageTarget; if (Environment.GetCommandLineArgs().Length > 1) messageTarget = ShowWindowsMessage; else messageTarget = Console.WriteLine; messageTarget("Hello, World!"); } private static void ShowWindowsMessage(string message) { MessageBox.Show(message); } }

此外可以使用委托与匿名方法在 C# 中,如以下示例所示。 (有关匿名方法的介绍,请参阅。)

C#复制
using System;using System.Windows.Forms;public class TestAnonMethod { public static void Main() { Action
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); } }

你还可以分配一个 lambda 表达式到委托实例,如以下示例所示。 (有关 lambda 表达式的简介,请参阅。)

C#复制
using System;using System.Windows.Forms;public class TestLambdaExpression { public static void Main() { Action
messageTarget; 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); } }

并每个方法均采用委托作为参数。 由委托封装的方法,可对数组或列表中的每个元素执行操作。 该示例使用方法来提供演示。

适用于

.NET Core

2.1 2.0 1.1 1.0

.NET Framework

4.7.2 4.7.1 4.7 4.6.2 4.6.1 4.6 4.5.2 4.5.1 4.5 4.0 3.5 3.0 2.0

.NET Standard

2.0 1.6 1.5 1.4 1.3 1.2 1.1 1.0

Xamarin.Android

7.1

Xamarin.iOS

10.8

Xamarin.Mac

3.0

另请参阅

转载于:https://www.cnblogs.com/zouhao/p/10054900.html

你可能感兴趣的文章
数据结构3——浅谈zkw线段树
查看>>
Introduction to my galaxy engine 2: Depth of field
查看>>
V2019 Super DSP3 Odometer Correction Vehicle List
查看>>
Python 3.X 练习集100题 05
查看>>
今时不同往日:VS2010十大绝技让VS6叹服
查看>>
设计器 和后台代码的转换 快捷键
查看>>
在线视频播放软件
查看>>
用代码生成器生成的DAL数据访问操作类 基本满足需求了
查看>>
28初识线程
查看>>
Monkey测试结果分析
查看>>
Sublime Text 3 设置
查看>>
浅谈C++底层机制
查看>>
STL——配接器、常用算法使用
查看>>
第9课 uart
查看>>
Range和xrange的区别
查看>>
STL容器之vector
查看>>
无法向会话状态服务器发出会话状态请求
查看>>
数据中心虚拟化技术
查看>>
01入门
查看>>
复习文件操作
查看>>