1.dynamic ExpandoObject
熟悉js的朋友都知道js可以这么写 :

 
1 var t = new Object();
2 t.Abc = ‘something’;
3 t.Value = 243;

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

 
1 static void Main(string[] args)
2
3 dynamic t = new ExpandoObject();
4 t.Abc = "abc"
5 t.Value = 10000;
6 Console.WriteLine("t's abc = {0},t's value = {1}", t.Abc, t.Value);
7 Console.ReadLine();
8 }

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

2.泛型自动转换

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

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

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

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

3.方法参数之可选参数
如下方法声明的语法

1 static void DoSomething(int notOptionalArg,string arg1 = "default Arg1"string arg2 = "default arg2") {
2     Console.WriteLine("arg1 = {0},arg2 = {1}",arg1,arg2);
3 }

这个方法有三个参数第一个是必选参数,第二个和第三个是可选参数,他们都有一个默认值。这种形式对固定参数的几个方法重载很有用。
如下调用:

1 static void Main(string[] args)
2
3     DoSomething(1);
4     DoSomething(1, "葫芦");
5     DoSomething(1, "葫芦""黄瓜");
6     Console.ReadLine(); 
7 }

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

1 static void DoSomething(int notOpArg, string arg)
2
3     Console.WriteLine("arg1 = {0}", arg);
4 }

我又重载了一个DoSomething这个方法有两个参数,但是没有可选参数,实验证明调用
DoSomething(1,”arg”)时会优先执行没有可选参数的方法。

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

1 static void DoSomething(int height, int width, string openerName, string scroll) {
2     Console.WriteLine("height = {0},width = {1},openerName = {2}, scroll = {3}",height,width,openerName,scroll);
3 }

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

 
1 static void Main(string[] args)
2
3     DoSomething( scroll : "no",height : 10, width : 5, openerName : "windowname");
4     Console.ReadLine(); 
5 }

很显然的这是一个语法糖,但是在方法参数很多的情况下很有意义,可以增加代码的可读性。

C# 4.0 新特性dynamic、可选参数、命名参数等的更多相关文章

  1. C# 4.0 新特性-dynamic 【转】

    前段时间看过一些关于dynamic这个C#4中的新特性,看到有些朋友认为dynamic的弊大于利,如无法使用编译器智能提示,无法在编译时做静态类型检查,性能差等等.因此在这篇文章中我将就这些问题来对d ...

  2. C# 9.0 新特性之 Lambda 弃元参数

    阅读本文大概需要不到 1 分钟. 弃元(Discards) 是在 C# 7.0 的时候开始支持的,它是一种人为丢弃不使用的临时虚拟变量.语法上它是用来赋值的,但它却不被分配存储空间,即没有值,所以不能 ...

  3. C# 4.0 新特性dynamic (待学习)

    随便翻看了一下dynamic,在网上拷贝了一个例子,先贴出来等有空了再慢慢消化 static void Main(string[] args) { dynamic d = new MyDynamicO ...

  4. C# 9.0 新特性预览 - 空参数校验

    C# 9.0 新特性预览 - 空参数校验 前言 随着 .NET 5 发布日期的日益临近,其对应的 C# 新版本已确定为 C# 9.0,其中新增加的特性(或语法糖)也已基本锁定,本系列文章将向大家展示它 ...

  5. Servlet 3.0 新特性详解

    转自:http://www.ibm.com/developerworks/cn/java/j-lo-servlet30/#major3 Servlet 是 Java EE 规范体系的重要组成部分,也是 ...

  6. 【转帖】Servlet 3.0 新特性详解

    http://www.ibm.com/developerworks/cn/java/j-lo-servlet30/ Servlet 3.0 新特性概述 Servlet 3.0 作为 Java EE 6 ...

  7. Servlet 3.0 新特性详解 (转载)

    原文地址:https://www.ibm.com/developerworks/cn/java/j-lo-servlet30/ Servlet 3.0 新特性概述 Servlet 3.0 作为 Jav ...

  8. Java Servlet 3.0 新特性

    Servlet 3.0 新特性概述 Servlet 3.0 作为 Java EE 6 规范体系中一员,随着 Java EE 6 规范一起发布.该版本在前一版本(Servlet 2.5)的基础上提供了若 ...

  9. Servlet 3.0 新特性概述

    Servlet 3.0 新特性概述 Servlet 3.0 作为 Java EE 6 规范体系中一员,随着 Java EE 6 规范一起发布.该版本在前一版本(Servlet 2.5)的基础上提供了若 ...

随机推荐

  1. Unity3D - Animator Controller循环依赖

    问题 假设有2个Animator Controller,分别命名为TestControllerLhs.controller以及TestControllerRhs.controller.在TestCon ...

  2. java基础--static关键字的使用

    一.static关键字的作用 使类成员完全独立于该类的任何对象.通常情况下,类成员必须通过它的类的对象访问,但是被static修饰的成员,能够被自己访问,而不必引用特定的实例. 一旦一个成员被声明为s ...

  3. linux 计划任务(crontab)

    每天写一点,总有一天我这条咸鱼能变得更咸 cron服务是一个linux下 的定时执行工具,可以在无需人工干预的情况下运行作业.频率可以划分为 分钟 小时 天 月 周,格式如下: 1.crontab 服 ...

  4. 如何删除错误提交的 git 大文件

    早上小伙伴告诉我,他无法拉下代码,我没有在意.在我开始写代码的时候,发现我的 C 盘炸了.因为我的磁盘是苏菲只有 256G 放了代码就没空间了,于是我查找到了原来是我的代码占用了居然有 2000+M ...

  5. Ubuntu安装Flash视频插件

    http://www.linuxidc.com/Linux/2014-05/101095.htm

  6. ubuntu软件使用汇总

    ubuntu使用合集 安装Ubuntu时的硬盘分区 Linux入门(1)--Ubuntu16.04安装搜狗拼音 Linux入门(2)--Ubuntu16.04安装wineQQ Linux入门(3)-- ...

  7. 实验测试之------创建DBlink,查询远端的yang用户下的abcdedfa表,创建同义词

    --测试环境,20远端,30本地: --准备1,20远端建立表的同义词,用户信息: 1.11 ---------------------------------------------------准备 ...

  8. LeetCode 532. K-diff Pairs in an Array (在数组中相差k的配对)

    Given an array of integers and an integer k, you need to find the number of unique k-diff pairs in t ...

  9. CMake vs Make对比

    程序员现在已经使用了CMake和Make了很久.当您加入大公司或开始使用大型代码库开发项目时,您需要处理所有这些构建.你必须看到这些“CMakeLists.txt”文件浮动.你应该在终端上运行“cma ...

  10. containing block和BFC

    1.Box Box 是 CSS 布局的对象和基本单位,元素的类型和 display 属性,决定了这个 Box 的类型.比较常见的有: block-level box:display 属性为 block ...