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 }

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

最新文章

  1. Canvas讲解
  2. innodb的存储结构
  3. 黑马程序员-c语言-类型强制转换
  4. FPGA奇数分频
  5. AES加密时抛出 Illegal key size or default parameters
  6. poj 3094 Quicksum
  7. 【转】secureCRT使用退格键(backspace)出现^H解决办法
  8. 如何设置 Internal 类,方法,属性对其他项目可见
  9. Mysql----浅入浅出之视图、存储过程、触发器
  10. 【linux之find及awk】
  11. ubuntu旧版本源失效的处理方法
  12. 在混合开发框架模式中,简化客户端对Web API的频繁调用
  13. ZOJ3774 Power of Fibonacci 斐波那契、二项式定理
  14. nginx(二)nginx的安装
  15. 二维码图片以字符串的形式保存DB,已文件流显示页面上
  16. Python基础-python数据类型之字符串(四)
  17. linux screen 命令 :离线运行程序
  18. Java 将图片转成base64,传到前台展示
  19. 初识SQL语句
  20. cesium and three.js【转】

热门文章

  1. 浅谈Java多态
  2. linux RPM软件包管理
  3. Android使用RxJava+Retrofit2+Okhttp+MVP练习的APP
  4. Qt+VS2015应用程序发布
  5. Android之View绘制流程源码分析
  6. Linux-问题集锦(1)
  7. win10 uwp 如何让一个集合按照需要的顺序进行排序
  8. win10 uwp 异步进度条
  9. 虚拟机VMware Workstation Pro下安装ubuntu-14.04.4(64位)方法(附ubuntu-14.04-desktop-amd64.iso下载链接)
  10. 正六边形网格化(Hexagonal Grids)原理与实现