论坛交流
首页办公自动化| 网页制作| 平面设计| 动画制作| 数据库开发| 程序设计| 全部视频教程
应用视频: Windows | Word2007 | Excel2007 | PowerPoint2007 | Dreamweaver 8 | Fireworks 8 | Flash 8 | Photoshop cs | CorelDraw 12
编程视频: C语言视频教程 | HTML | Div+Css布局 | Javascript | Access数据库 | Asp | Sql Server数据库Asp.net  | Flash AS
当前位置 > 文字教程 > Asp.net教程
Tag:静态页面,treeview,gridview,repeater,dataset,sqldatareader,ado.net,上传,三层,ajax,xml,留言本,新闻发布,商城,注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,触发器,socket,form认证,登录,视频教程

C# 4.0 新特性dynamic、可选参数、命名参数等

文章类别:Asp.net | 发表日期:2010-5-26 17:47:15

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

view sourceprint?1 var t = new Object(); 

2 t.Abc = ‘something’; 

3 t.Value = 243;

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

view sourceprint?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之前下面的代码是不可以编译通过的

view sourceprint?1 IEnumerable<object> objs = new List<string> { 

2         "I'm 0","I'am 1","I'am 2"

3     };

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

view sourceprint?1 List<object> objList = new List<string> {  

2         "I'am 0","I'am 1","I'am 2"

3     };

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

view sourceprint?1 static void DoSomething(int notOptionalArg,string arg1 = "default Arg1", string arg2 = "default arg2") { 

2     Console.WriteLine("arg1 = {0},arg2 = {1}",arg1,arg2); 

3 }

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

view sourceprint?1 static void Main(string[] args) 

2 { 

3     DoSomething(1); 

4     DoSomething(1, "葫芦"); 

5     DoSomething(1, "葫芦", "黄瓜"); 

6     Console.ReadLine();  

7 }

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

view sourceprint?1 static void DoSomething(int notOpArg, string arg) 

2 { 

3     Console.WriteLine("arg1 = {0}", arg); 

4 }

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

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

view sourceprint?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 }

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

view sourceprint?1 static void Main(string[] args) 

2 { 

3     DoSomething( scroll : "no",height : 10, width : 5, openerName : "windowname"); 

4     Console.ReadLine();  

5 }

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

视频教程列表
文章教程搜索
 
Asp.net推荐教程
Asp.net热门教程
看全部视频教程
购买方式/价格
购买视频教程: 咨询客服
tel:15972130058