日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
教你寫不可思議的C#代碼

.Net 4 中引入了 dynamic 動(dòng)態(tài)類型,這一消息確實(shí)讓我們興奮了一把,但是興奮之余,又發(fā)現(xiàn)它相對(duì)于其他的動(dòng)態(tài)語(yǔ)言來說還有不足之處。不過借助 CodePlex 上的一個(gè)開源項(xiàng)目 Clay,我們可以寫出以下不可思議的代碼,代碼如下:

成都創(chuàng)新互聯(lián)憑借在網(wǎng)站建設(shè)、網(wǎng)站推廣領(lǐng)域領(lǐng)先的技術(shù)能力和多年的行業(yè)經(jīng)驗(yàn),為客戶提供超值的營(yíng)銷型網(wǎng)站建設(shè)服務(wù),我們始終認(rèn)為:好的營(yíng)銷型網(wǎng)站就是好的業(yè)務(wù)員。我們已成功為企業(yè)單位、個(gè)人等客戶提供了網(wǎng)站制作、網(wǎng)站建設(shè)服務(wù),以良好的商業(yè)信譽(yù),完善的服務(wù)及深厚的技術(shù)力量處于同行領(lǐng)先地位。

 
 
 
 
  1. var directory = New.Array(  
  2.     New.Person(  
  3.         FirstName: "Louis",  
  4.         LastName: "Dejardin",  
  5.         Aliases: new[] { "Lou" }  
  6.     ),  
  7.     New.Person(  
  8.         FirstName: "Bertrand",  
  9.         LastName: "Le Roy" 
  10.     ).Aliases("bleroy", "boudin"),  
  11.     New.Person(  
  12.         FirstName: "Renaud",  
  13.         LastName: "Paquay" 
  14.     ).Aliases("Your Scruminess", "Chef")  
  15. ).Name("Some Orchard folks"); 

       讓我們先來看看是代碼是如何的不可思議。

不可思議的對(duì)象初始化
新建 c# 項(xiàng)目,引用 Clay 項(xiàng)目(或其 dll), 并加入下面一行代碼(建議看完本文再自行嘗試):

 
 
 
 
  1. dynamic New = new ClayFactory(); 

先看下面的簡(jiǎn)單代碼:

 
 
 
 
  1. var person = New.Person();  
  2. person.FirstName = "Louis"
  3. ;person.LastName = "Dejardin"; 

不足為奇,使用 .Net 4 中的 ExpandoObject 也能做到。

下面的代碼就有點(diǎn)意思了:

 
 
 
 
  1. var person = New.Person();  
  2. person["FirstName"] = "Louis";  
  3. person["LastName"] = "Dejardin"; 

這段代碼和上面的效果是一樣的,它使用索引器的方式為 person 的屬性賦值,是不是有點(diǎn)類似 JavaScript?

再來看 jQuery 風(fēng)格的代碼:

 
 
 
 
  1. var person = New.Person()  
  2.     .FirstName("Louis")  
  3.     .LastName("Dejardin"); 

還可以使用匿名類型方式:

 
 
 
 
  1. var person = New.Person(new {  
  2.     FirstName = "Louis",  
  3.     LastName = "Dejardin" 
  4. }); 

甚至還可以使用命名參數(shù)方式:

 
 
 
 
  1. var person = New.Person(  
  2.     FirstName: "Louis",  
  3.     LastName: "Dejardin" 
  4. ); 

不可思議吧!

綜上所述,我們有多種方式始化實(shí)體設(shè)置屬性值,以下方式都是等同的:

 
 
 
 
  1. person.FirstName  
  2. person["FirstName"]  
  3. person.FirstName() 

不可思議的 Array
我們可以創(chuàng)建 JavaScript 風(fēng)格的 Array:

 
 
 
 
  1. var people = New.Array(  
  2.     New.Person().FirstName("Louis").LastName("Dejardin"),  
  3.     New.Person().FirstName("Bertrand").LastName("Le Roy")  
  4. ); 

可如下操作這個(gè)集合:

 
 
 
 
  1. int count = people.Count;  
  2. string firstName = people[0].FirstName; 

我們還可以給實(shí)例動(dòng)態(tài)增加 array 屬性:

 
 
 
 
  1. person.Aliases("bleroy", "BoudinFatal"); 

或者:

 
 
 
 
  1. person.Aliases(new[] {"Lou"}); 

還能向集合中增加新的元素:

 
 
 
 
  1. person.Aliases.Add("loudej"); 

到這里,寫出文首給出的 c# 代碼應(yīng)該不成問題了。

不可思議的動(dòng)態(tài)接口實(shí)現(xiàn)
“動(dòng)態(tài)接口實(shí)現(xiàn)”這個(gè)標(biāo)題可能不太恰當(dāng),還是通過代碼來說明問題吧。假定我們有如下接口:

 
 
 
 
  1. public interface IPerson {  
  2.     string FirstName { get; set; }  
  3.     string LastName { get; set; }  

可以如下使用:

 
 
 
 
  1. dynamic New = new ClayFactory();  
  2. var people = New.Array(  
  3.     New.Person().FirstName("Louis").LastName("Dejardin"),  
  4.     New.Person().FirstName("Bertrand").LastName("Le Roy")  
  5. );  
  6. IPerson lou = people[0];  
  7. var fullName = lou.FirstName + " " + lou.LastName; 

只不過是我們通過 New.Person() 創(chuàng)建的一個(gè)動(dòng)態(tài)對(duì)象,并沒有實(shí)現(xiàn) IPerson 接口啊,可就是能編譯并運(yùn)行通過:

神奇吧!還不抓緊試試!

Clay是 CodePlex 上的一個(gè)開源項(xiàng)目,幫助我們創(chuàng)建輕松創(chuàng)建對(duì)象,就 JavaScript 或其它動(dòng)態(tài)語(yǔ)言一樣簡(jiǎn)單。Clay 項(xiàng)目的網(wǎng)址是 http://clay.codeplex.com,目前沒有發(fā)布好的下載,我們可以直接下載它的源碼

【編輯推薦】

  1. Lambda簡(jiǎn)化C#編程學(xué)習(xí)心得
  2. C#圖片處理的3種高級(jí)實(shí)用方法
  3. C#不如Java的地方:靜態(tài)導(dǎo)入
  4. 10個(gè)C#編程和Visual Studio使用技巧

標(biāo)題名稱:教你寫不可思議的C#代碼
文章地址:http://www.5511xx.com/article/cophspj.html