C#高级功能(三)Action、Func,Tuple
Action和Func泛型委托实际上就是一个.NET Framework预定义的委托,3.5引入的特性。基本涵盖了所有常用的委托,所以一般不用用户重新声明。Action系列泛型委托,是没有返回参数的委托,最多可以有16参数,也可以没有参数;Func系列的委托是有返回值的委托,最多可以有16个参数;元组是C# 4.0引入的一个新特性,编写的时候需要基于.NET Framework 4.0或者更高版本。元组使用泛型来简化一个类的定义.提供用于创造元组对象的静态方法。最多可以提供创建新的 8 元组,即八元组。
Action
此委托可用于将方法作为参数传递而不用显式声明自定义委托。 封装的方法必须对应于此委托定义方法签名。 这意味着,封装的方法必须具有任何参数,没有返回值。
public delegate void Action()
//void method();
Action test1 = () => { Console.WriteLine("void method();"); };
//void method(x);
Action<int> test2 = (x) => { Console.WriteLine("void method(t1)"); };
//void method(x, y);
Action<int, int> test3 = (x, y) => { Console.WriteLine("void method(t1, t2)"); };
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>()
Func
可以使用此委托来表示的方法,而无需显式声明自定义的委托作为参数进行传递。 封装的方法必须对应于此委托定义的方法签名。 这意味着,封装的方法可以具有任何参数,并且必须返回一个值。
public delegate TResult Func<out TResult>()
//int method();
Func<int> test4 = () => ;
//int method(x);
Func<int, int> test5 = (x) => x * ;
//int method(x,x);
Func<int, int, int> test6 = (x, y) => x * y;
public delegate TResult Func<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, out TResult>()
Tuple
元组是一种数据结构,具有特定数量和元素序列,用在方法上可以作为返回值,返回多个数据。
public static Tuple<T1> Create<T1>(
T1 item1
)
var tuple1 = Tuple.Create();
Console.WriteLine(tuple1.Item1); // Displays 1 var tuple1 = new Tuple<int>();
Console.WriteLine(tuple1.Item1); // Displays 1
Tuple.Create<T1, T2, T3, T4, T5, T6, T7, T8> 方法 (T1, T2, T3, T4, T5, T6, T7, T8) var primes = new Tuple<int, int, int, int, int, int, int,
Tuple<int>>(, , , , , , , new Tuple<int>());//元祖里面可以嵌套元祖
Tuple<int, int, int, int, int, int, int, Tuple<int, int, int>> test = new Tuple<int, int, int, int, int, int, int, Tuple<int, int, int>>(, , , , , , , new Tuple<int, int, int>(, ));
//元祖准确的可以说是当做拥有多个返回值的一种方法,不用使用ref,out了,比较方便。
其他的基础功能
5. C#中泛型的解释(object,list,var,dynamic的区别)
6. C#中委托
7. C#和.NET版本对比
C#高级功能(三)Action、Func,Tuple的更多相关文章
- C#高级功能(四)扩展方法和索引
扩展方法使你能够向现有类型“添加”方法,而无需创建新的派生类型.重新编译或以其他方式修改原始类型. 扩展方法是一种特殊的静态方法,但可以像扩展类型上的实例方法一样进行调用.扩展方法被定义为静态方法,但 ...
- C#高级功能(二)LINQ 和Enumerable类
介绍LINQ之前先介绍一下枚举器 Iterator:枚举器如果你正在创建一个表现和行为都类似于集合的类,允许类的用户使用foreach语句对集合中的成员进行枚举将会是很方便的.我们将以创建一个简单化的 ...
- C#高级功能(一)Lambda 表达式
Lambda 表达式是一种可用于创建委托或表达式目录树类型的匿名函数. 通过使用 lambda 表达式,可以写入可作为参数传递或作为函数调用值返回的本地函数. Lambda 表达式对于编写 LINQ ...
- VS2012 Unit Test(Void, Action, Func) —— 对无返回值、使用Action或Func作为参数、多重载的方法进行单元测试
[提示] 1. 阅读文本前希望您具备如下知识:了解单元测试,了解Dynamic,熟悉泛型(协变与逆变)和Lambda,熟悉.NET Framework提供的 Action与Func委托.2.如果您对单 ...
- iOS开发——UI篇Swift篇&玩转UItableView(二)高级功能
UItableView高级功能 class UITableViewControllerAF: UIViewController, UITableViewDataSource, UITableViewD ...
- Stm32高级定时器(三)
Stm32高级定时器(三) 1 互补输出和死区插入 1.1 死区:某个处于相对无效状态的时间或空间 本来OCX信号与OCXREF时序同相同步,OCXN信号与OCXREF时序反相同步.但为了安全考虑,以 ...
- 打开phpmyadmin显示高级功能尚未完全设置部分功能未激活
问题:老师,打开phpmyadmin显示高级功能尚未完全设置部分功能未激活,应该如何解决? 这是前一阵子学生问过我的一个问题,今天我就在博客里解答你的疑问吧. 总共三步可以搞定 1.导入相关文件到数据 ...
- pandas小记:pandas高级功能
http://blog.csdn.net/pipisorry/article/details/53486777 pandas高级功能:面板数据.字符串方法.分类.可视化. 面板数据 {pandas数据 ...
- Delegate,Action,Func,匿名方法,匿名委托,事件 (转载)
Delegate,Action,Func,匿名方法,匿名委托,事件 (转载) 一.委托Delegate 一般的方法(Method)中,我们的参数总是string,int,DateTime...这些基本 ...
随机推荐
- 转载:Cocos2D-x 游戏接入 Windows 设备所需做的六件事
原文地址:http://msopentech.com/zh-hans/blog/2014/05/09/cocos2d-x-%E6%B8%B8%E6%88%8F%E6%8E%A5%E5%85%A5-wi ...
- 修改 sql server 2008R2的端口,配置防火墙允许远程访问SQL Server 2008 R2
1.先修改 sql server 2008R2的端口号吧,1433经常成为别人入侵的端口,在sql server 配置管理器 -->sql server 网络配置-->MSSQLSERVE ...
- Android开发-API指南-<application>
<application> 英文原文:http://developer.android.com/guide/topics/manifest/application-element.html ...
- Laxcus大数据管理系统2.0(8)- 第六章 网络通信
第六章 网络通信 Laxcus大数据管理系统网络建立在TCP/IP网络之上,从2.0版本开始,同时支持IPv4和IPv6两种网络地址.网络通信是Laxcus体系里最基础和重要的一环,为了能够利用有限的 ...
- Can't locate Switch.pm in @INC
the perl version (5.14) shipped with 12.10 does not include the Switch.pm module needed while buildi ...
- android service 学习
参考:http://www.cnblogs.com/allin/archive/2010/05/15/1736458.html http://www.cnblogs.com/allin/archive ...
- ASP.NET MVC4 学习系统五(Razor)
Razor ,你好! Razor 是一种把代码和内容进行平滑集成的语法.尽管它引入了一些新的符号和关键字,但是Razor并不是一种新的语法.相反,Razor允许用户使用已知的语言来编写代码 ...
- javascript代码复用模式
代码复用有一个著名的原则,是GoF提出的:优先使用对象组合,而不是类继承.在javascript中,并没有类的概念,所以代码的复用,也并不局限于类式继承.javascript中创建对象的方法很多,有构 ...
- Android添加权限大讲解
对于新手来说,最烦恼的不是如何从网上下载到安卓项目,而是下载到的安卓项目不知道如何添加权限和要添加哪些权限. 现在就针对安卓的权限来讲解这些权限应该具体用在什么地方 首先在项目下找到 AndroidM ...
- 可视化数据包分析工具-CapAnalysis
可视化数据包分析工具-CapAnalysis 我们知道,Xplico是一个从pcap文件中解析出IP流量数据的工具,本文介绍又一款实用工具-CapAnalysis(可视化数据包分析工具),将比Xpli ...