之前的文章中,我们曾介绍过C#的历史及C# 4.0新增特性,包括:dynamic、 命名和可选参数、动态导入以及协变和逆变等。今天我们结合代码实例来具体看一下C#4.0中的四个比较重要的特性。

  1.dynamic ExpandoObject

  熟悉js的朋友都知道js可以这么写 :

var t =newObject(); t.Abc =‘something’; t.Value =243;

  现在这个js动态语言的特性,我们也可以在c#中使用了,前提是将一个变量声明为ExpandoObject类型。如下例:

staticvoidMain(string[] args)
  {
dynamic t =newExpandoObject();
t.Abc ="abc";
t.Value =10000;
        Console.WriteLine("t's abc = {0},t's value = {1}", t.Abc, t.Value);
Console.ReadLine();

  }

  C# 4.0中新增了一个命名空间System.Dynamic来实现对此应用的支持,这种用法的意义何在,现在我还不太清楚,也是C#向动态语言过渡的一种试探吧。

  2.泛型自动转换

  在C# 4.0之前下面的代码是不可以编译通过的

IEnumerable<object>objs = newList<string>{ "I'm 0","I'am 1","I'am 2"};

  在C# 4.0中这种声明是允许的,不过也仅限于泛型接口,泛型类型的类似做法是不允许的,如下代码是有编译错误的

List<object>objList =newList<string>{ "I'am 0","I'am 1","I'am 2"};

  3.方法参数之可选参数

  如下方法声明的语法

staticvoidDoSomething(intnotOptionalArg, stringarg1 ="default Arg1", stringarg2 ="default arg2")
  {
      Console.WriteLine("arg1 = {0},arg2 = {1}",arg1,arg2);
  }

  这个方法有三个参数第一个是必选参数,第二个和第三个是可选参数,他们都有一个默认值。

  这种形式对固定参数的几个方法重载很有用。如下调用:

static voidMain(string[] args)
  {
        DoSomething(1);
        DoSomething(1, "葫芦");
        DoSomething(1, "葫芦", "黄瓜");
        Console.ReadLine();
  }

  也许你会想到,假如我有一个和可选参数方法某个参数相同的方法签名的方法时,C#会怎么处理呢,我们看下下面的代码

static voidDoSomething(intnotOpArg, stringarg)
  {
        Console.WriteLine("arg1 = {0}", arg);
    }

  这里又重载了一个DoSomething这个方法有两个参数,但是没有可选参数,

  实验证明调用DoSomething(1,”arg”)时会优先执行没有可选参数的方法。

  4.方法参数之命名参数

  命名参数让我们可以在调用方法时指定参数名字来给参数赋值,这种情况下可以忽略参数的顺序。如下方法声明:

static voidDoSomething(intheight, intwidth, stringopenerName, stringscroll)
  {
        Console.WriteLine("height = {0},width = {1},openerName = {2}, scroll = {3}",height,width,openerName,scroll);
  }

  我们可以这样来调用上面声明的方法

staticvoidMain(string[] args)
  {
      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 新增特性相关推荐

  1. MongoDB 3.0新增特性一览

    引言 在历经版本号修改(2.8版本直接跳到3.0版本)和11个rc版本之后,MongoDB 3.0于2015年3月3日正式发布.可以毫不夸张的说,该版本的新增特性标志着MongoDB这款典型的NoSQ ...

  2. PHP 7.0新增特性详解

    https://www.cnblogs.com/riverdubu/archive/2017/03/22/6434705.html 开始介绍PHP7.0新特性,具体的可以参照官网的介绍,我来挑一些给大 ...

  3. mysql 8.0 创建函数_MySQL 8.0 新增特性

    1. 数据字典 新增了事务型的数据字典,用来存储数据库对象信息 之前,字典数据是存储在元数据文件和非事务型表中的 2. 账号权限管理 添加了对 "角色" 的支持,角色会对应一套权限 ...

  4. MongoDB 3.0 新增特性一览

    引言 在历经版本号修改(2.8版本直接跳到3.0版本)和11个rc版本之后,MongoDB3.0于2015年3月3日正式发布.可以毫不夸张的说,该版本的新增特性标志着MongoDB这款典型的NoSQL ...

  5. .NET Framework 2.0新增特性总结

    下午闲着无聊,翻了翻很久之前买的书籍,看了一下dotNetFramework2.0后添加的特性,包括以下几点: 代码段.这个功能很早就知道了,Framework已经提供了很多代码段,我们也可以自定义代 ...

  6. Servlet3.0新特性全解

    tomcat 7以上的版本都支持Servlet 3.0 Servlet 3.0 新增特性 注解支持:Servlet.Filter.Listener无需在web.xml中进行配置,可以通过对应注解进行配 ...

  7. 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的概念 ...

  8. MySQL基础篇13【MySQL8.0新特性】

    目录 1. MySQL8新特性概述 1.1 MySQL8.0 新增特性 1.2 MySQL8.0移除的旧特性 新特性1:窗口函数 2.1 使用窗口函数前后对比 2.2 窗口函数分类 2.3 语法结构 ...

  9. Spring Boot 2.0 新特性(二):新增事件ApplicationStartedEvent

    今天继续来聊Spring Boot 2.0的新特性.本文将具体说说2.0版本中的事件模型,尤其是新增的事件: ApplicationStartedEvent. 原文首发:http://blog.did ...

最新文章

  1. 美团Java面试154道题分享!
  2. Shell下的环境变量
  3. 使用nodejs将某个简书用户的文章进行导出
  4. python中异常和错误是同一个概念吗_Python 错误与异常
  5. (33)Gulp构建脚本文件
  6. 西瓜书+实战+吴恩达机器学习(六)监督学习之逻辑回归 Logistic Regression
  7. 泵车砼活塞故障预警-冠军方案
  8. 2d头发_3D打印毛囊突破性进展!“头发工厂”将成秃顶的救星
  9. Spring之AOP面向切面编程
  10. android电商组件化分配,android电商组件化设计(含源码):MVP+dagger+组件化
  11. idea eclipse主题
  12. DAY1——sql 建表/插入数据
  13. xctf攻防世界 MISC高手进阶区 我们的秘密是绿色的
  14. Effective C++ NVI手法
  15. 绘制图形与3D增强技巧(三)----三角形图元TRANGLE
  16. 迭代法求解递推方程,
  17. 网易云音乐数据治理探索与实践
  18. BUUCTF:间谍启示录
  19. Spring boot Mybatis 整合
  20. Linux基础篇之网络配置

热门文章

  1. SQLServer图数据库一些优点
  2. 【图像处理】【计算机视觉】线性邻域滤波专场:方框滤波、均值滤波与高斯滤波...
  3. jQuery中ajax加载文本
  4. 项目调试之小工具---文件名替换
  5. MFC类结构-1、CObject类
  6. 走进单元测试:测试需要从哪些方面着手
  7. 记忆模糊的知识点5-17
  8. 数据流重定向和管道命令, grep, tr,sort, wc, cut,split,tee,sleep(shell 02)
  9. 异常信息: java.lang.ClassNotFoundException: org.aspec
  10. uva12716 n以内有多少对整数a、b满足(1≤b≤a)且gcd(a, b) = xor(a, b)