C# 4.0 新增特性
之前的文章中,我们曾介绍过C#的历史及C# 4.0新增特性,包括:dynamic、 命名和可选参数、动态导入以及协变和逆变等。今天我们结合代码实例来具体看一下C#4.0中的四个比较重要的特性。
1.dynamic ExpandoObject
熟悉js的朋友都知道js可以这么写 :
现在这个js动态语言的特性,我们也可以在c#中使用了,前提是将一个变量声明为ExpandoObject类型。如下例:
{
Console.WriteLine("t's abc = {0},t's value = {1}", t.Abc, t.Value);
}
C# 4.0中新增了一个命名空间System.Dynamic来实现对此应用的支持,这种用法的意义何在,现在我还不太清楚,也是C#向动态语言过渡的一种试探吧。
2.泛型自动转换
在C# 4.0之前下面的代码是不可以编译通过的
在C# 4.0中这种声明是允许的,不过也仅限于泛型接口,泛型类型的类似做法是不允许的,如下代码是有编译错误的
3.方法参数之可选参数
如下方法声明的语法
{
Console.WriteLine("arg1 = {0},arg2 = {1}",arg1,arg2);
}
这个方法有三个参数第一个是必选参数,第二个和第三个是可选参数,他们都有一个默认值。
这种形式对固定参数的几个方法重载很有用。如下调用:
{
DoSomething(1);
DoSomething(1, "葫芦");
DoSomething(1, "葫芦", "黄瓜");
Console.ReadLine();
}
也许你会想到,假如我有一个和可选参数方法某个参数相同的方法签名的方法时,C#会怎么处理呢,我们看下下面的代码
{
Console.WriteLine("arg1 = {0}", arg);
}
这里又重载了一个DoSomething这个方法有两个参数,但是没有可选参数,
实验证明调用DoSomething(1,”arg”)时会优先执行没有可选参数的方法。
4.方法参数之命名参数
命名参数让我们可以在调用方法时指定参数名字来给参数赋值,这种情况下可以忽略参数的顺序。如下方法声明:
{
Console.WriteLine("height = {0},width = {1},openerName = {2}, scroll = {3}",height,width,openerName,scroll);
}
我们可以这样来调用上面声明的方法
{
DoSomething( scroll : "no",height : 10, width : 5, openerName : "windowname");
Console.ReadLine();
}
很显然的这是一个语法糖,但是在方法参数很多的情况下很有意义,可以增加代码的可读性。
转载于:https://www.cnblogs.com/hengbo/archive/2011/11/02/2232604.html
C# 4.0 新增特性相关推荐
- MongoDB 3.0新增特性一览
引言 在历经版本号修改(2.8版本直接跳到3.0版本)和11个rc版本之后,MongoDB 3.0于2015年3月3日正式发布.可以毫不夸张的说,该版本的新增特性标志着MongoDB这款典型的NoSQ ...
- PHP 7.0新增特性详解
https://www.cnblogs.com/riverdubu/archive/2017/03/22/6434705.html 开始介绍PHP7.0新特性,具体的可以参照官网的介绍,我来挑一些给大 ...
- mysql 8.0 创建函数_MySQL 8.0 新增特性
1. 数据字典 新增了事务型的数据字典,用来存储数据库对象信息 之前,字典数据是存储在元数据文件和非事务型表中的 2. 账号权限管理 添加了对 "角色" 的支持,角色会对应一套权限 ...
- MongoDB 3.0 新增特性一览
引言 在历经版本号修改(2.8版本直接跳到3.0版本)和11个rc版本之后,MongoDB3.0于2015年3月3日正式发布.可以毫不夸张的说,该版本的新增特性标志着MongoDB这款典型的NoSQL ...
- .NET Framework 2.0新增特性总结
下午闲着无聊,翻了翻很久之前买的书籍,看了一下dotNetFramework2.0后添加的特性,包括以下几点: 代码段.这个功能很早就知道了,Framework已经提供了很多代码段,我们也可以自定义代 ...
- Servlet3.0新特性全解
tomcat 7以上的版本都支持Servlet 3.0 Servlet 3.0 新增特性 注解支持:Servlet.Filter.Listener无需在web.xml中进行配置,可以通过对应注解进行配 ...
- android8.0及发布时间,android 8.0什么时候发布_android 8.0发布时间_android 8.0新特性
android 8.0什么时候发布,android 8.0发布时间.Android 8.0新增特性有什么?安卓8.0有哪些新特性?在2017年的I/O开发者大会上,国外设计师推出了一套安卓8.0的概念 ...
- MySQL基础篇13【MySQL8.0新特性】
目录 1. MySQL8新特性概述 1.1 MySQL8.0 新增特性 1.2 MySQL8.0移除的旧特性 新特性1:窗口函数 2.1 使用窗口函数前后对比 2.2 窗口函数分类 2.3 语法结构 ...
- Spring Boot 2.0 新特性(二):新增事件ApplicationStartedEvent
今天继续来聊Spring Boot 2.0的新特性.本文将具体说说2.0版本中的事件模型,尤其是新增的事件: ApplicationStartedEvent. 原文首发:http://blog.did ...
最新文章
- 美团Java面试154道题分享!
- Shell下的环境变量
- 使用nodejs将某个简书用户的文章进行导出
- python中异常和错误是同一个概念吗_Python 错误与异常
- (33)Gulp构建脚本文件
- 西瓜书+实战+吴恩达机器学习(六)监督学习之逻辑回归 Logistic Regression
- 泵车砼活塞故障预警-冠军方案
- 2d头发_3D打印毛囊突破性进展!“头发工厂”将成秃顶的救星
- Spring之AOP面向切面编程
- android电商组件化分配,android电商组件化设计(含源码):MVP+dagger+组件化
- idea eclipse主题
- DAY1——sql 建表/插入数据
- xctf攻防世界 MISC高手进阶区 我们的秘密是绿色的
- Effective C++ NVI手法
- 绘制图形与3D增强技巧(三)----三角形图元TRANGLE
- 迭代法求解递推方程,
- 网易云音乐数据治理探索与实践
- BUUCTF:间谍启示录
- Spring boot Mybatis 整合
- Linux基础篇之网络配置
热门文章
- SQLServer图数据库一些优点
- 【图像处理】【计算机视觉】线性邻域滤波专场:方框滤波、均值滤波与高斯滤波...
- jQuery中ajax加载文本
- 项目调试之小工具---文件名替换
- MFC类结构-1、CObject类
- 走进单元测试:测试需要从哪些方面着手
- 记忆模糊的知识点5-17
- 数据流重定向和管道命令, grep, tr,sort, wc, cut,split,tee,sleep(shell 02)
- 异常信息: java.lang.ClassNotFoundException: org.aspec
- uva12716 n以内有多少对整数a、b满足(1≤b≤a)且gcd(a, b) = xor(a, b)