自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

C# 4.0四大新特性代碼示例與解讀

開發(fā) 后端
這里向你介紹C# 4.0中的四個(gè)特性的使用方法和代碼示例,它們是dynamic ExpandoObject、泛型自動(dòng)轉(zhuǎn)換、可選參數(shù) 和命名參數(shù)。

在之前的文章中,我們?cè)榻B過(guò)C#的歷史及C# 4.0新增特性,包括:dynamic、命名和可選參數(shù)、動(dòng)態(tài)導(dǎo)入以及協(xié)變和逆變等。今天我們結(jié)合代碼實(shí)例來(lái)具體看一下C# 4.0中的四個(gè)比較重要的特性。

1.dynamic ExpandoObject

熟悉js的朋友都知道js可以這么寫 :

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

現(xiàn)在這個(gè)js動(dòng)態(tài)語(yǔ)言的特性,我們也可以在c#中使用了,前提是將一個(gè)變量聲明為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中新增了一個(gè)命名空間System.Dynamic來(lái)實(shí)現(xiàn)對(duì)此應(yīng)用的支持,這種用法的意義何在,現(xiàn)在我還不太清楚,也是是C#向動(dòng)態(tài)語(yǔ)言過(guò)渡的一種試探吧。關(guān)于動(dòng)態(tài)語(yǔ)言請(qǐng)參考《5月編程語(yǔ)言排行榜:動(dòng)態(tài)語(yǔ)言的前世今生》。

2.泛型自動(dòng)轉(zhuǎn)換

在C# 4.0之前下面的代碼是不可以編譯通過(guò)的

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

是在C# 4.0中這種聲明是允許的,不過(guò)也僅限于泛型接口,泛型類型的類似做法是不允許的,如下代碼是有編譯錯(cuò)誤的

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

3.方法參數(shù)之可選參數(shù)

如下方法聲明的語(yǔ)法

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

這個(gè)方法有三個(gè)參數(shù)第一個(gè)是必選參數(shù),第二個(gè)和第三個(gè)是可選參數(shù),他們都有一個(gè)默認(rèn)值。這種形式對(duì)固定參數(shù)的幾個(gè)方法重載很有用。如下調(diào)用:

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

也許你會(huì)想到,假如我有一個(gè)和可選參數(shù)方法不選某個(gè)參數(shù)相同的方法簽名的方法時(shí),C#會(huì)怎么處理呢,我們看下下面的代碼

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

這里又重載了一個(gè)DoSomething這個(gè)方法有兩個(gè)參數(shù),但是沒有可選參數(shù),實(shí)驗(yàn)證明調(diào)用DoSomething(1,”arg”)時(shí)會(huì)優(yōu)先執(zhí)行沒有可選參數(shù)的方法。

4.方法參數(shù)之命名參數(shù)

命名參數(shù)讓我們可以在調(diào)用方法時(shí)指定參數(shù)名字來(lái)給參數(shù)賦值,這種情況下可以忽略參數(shù)的順序。如下方法聲明:

  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. }  

我們可以這樣來(lái)調(diào)用上面聲明的方法

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

很顯然的這是一個(gè)語(yǔ)法糖,但是在方法參數(shù)很多的情況下很有意義,可以增加代碼的可讀性。 

【編輯推薦】

  1. 詳解C# 4.0中的新對(duì)象ExpandoObject
  2. 在Visual Studio 2010中使用C# 4.0的動(dòng)態(tài)類型
  3. C# 4.0中COM互操作性和方差得到增強(qiáng)
  4. C# 4.0中必選參數(shù)與可選參數(shù)混合的問題

 本文轉(zhuǎn)載自趙玉開的技術(shù)博客,博客地址:http://www.cnblogs.com/yukaizhao/

責(zé)任編輯:佚名 來(lái)源: 博客園
相關(guān)推薦

2011-04-02 09:45:00

Ubuntu 11.0特性

2010-05-13 08:57:22

jQuery 1.4

2020-01-10 15:44:50

編程語(yǔ)言C++Java

2009-08-19 16:51:14

C# 4.0 dyna

2009-05-26 09:28:22

C# 4.0dynamic動(dòng)態(tài)類型

2010-06-09 10:48:55

F#Silverlight

2009-05-26 11:15:31

C# 4.0dynamicVisual Stud

2010-01-22 09:52:32

JPA 2.0Java EE 6

2009-08-13 09:46:49

C#歷史C# 4.0新特性

2009-08-17 08:01:00

C#文件列表

2011-01-14 10:27:18

C#.netasp.net

2013-10-22 09:31:02

Ubuntu 13.1JujuOpenStack H

2010-08-17 09:57:39

C#

2009-09-08 17:20:01

C#排序算法

2015-10-26 09:04:21

PHP7新特性

2015-07-17 09:50:16

Carthage優(yōu)劣比較

2020-05-07 14:34:14

GitHub新功能開發(fā)者

2009-07-07 12:30:38

JDK1.6

2014-04-30 17:23:45

2009-08-21 13:18:25

C#異步調(diào)用
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)