新聞中心
本文旨在與園有分享我對(duì) .NET 匿名對(duì)象的認(rèn)識(shí),如果存在不足的地方歡迎指出。

創(chuàng)新互聯(lián)公司是由多位在大型網(wǎng)絡(luò)公司、廣告設(shè)計(jì)公司的優(yōu)秀設(shè)計(jì)人員和策劃人員組成的一個(gè)具有豐富經(jīng)驗(yàn)的團(tuán)隊(duì),其中包括網(wǎng)站策劃、網(wǎng)頁(yè)美工、網(wǎng)站程序員、網(wǎng)頁(yè)設(shè)計(jì)師、平面廣告設(shè)計(jì)師、網(wǎng)絡(luò)營(yíng)銷人員及形象策劃。承接:成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站制作、外貿(mào)網(wǎng)站建設(shè)、網(wǎng)站改版、網(wǎng)頁(yè)設(shè)計(jì)制作、網(wǎng)站建設(shè)與維護(hù)、網(wǎng)絡(luò)推廣、數(shù)據(jù)庫(kù)開(kāi)發(fā),以高性價(jià)比制作企業(yè)網(wǎng)站、行業(yè)門戶平臺(tái)等全方位的服務(wù)。
前言:最近園子里面大談程序員基礎(chǔ)知識(shí)的文章,基礎(chǔ)知識(shí)的重要性無(wú)需多論了??吹酱蠹覍?duì)基礎(chǔ)知識(shí)的評(píng)論后突然想到這么一個(gè)場(chǎng)景。曾經(jīng)有個(gè)同事問(wèn)我:有一個(gè)匿名對(duì)象想做為一個(gè)函數(shù)的返回值,可以么?我當(dāng)時(shí)堅(jiān)定的回答---不可以。而他也深信不疑,似乎真的實(shí)現(xiàn)不了。如果我沒(méi)記錯(cuò)的話當(dāng)時(shí)是.NET3.5環(huán)境,如果當(dāng)時(shí)是.NET4.0的話我就大錯(cuò)特錯(cuò)了。
開(kāi)始切入主題,我對(duì).NET 匿名對(duì)象的認(rèn)識(shí)如下:
一、.NET3.5時(shí)代開(kāi)始引入匿名對(duì)象概念
.NET3.0 時(shí),微軟加入了匿名對(duì)象到.net 中。javascript 程序員對(duì)匿名對(duì)象并不陌生。但是對(duì)于當(dāng)時(shí)的.NET程序員而言,應(yīng)該屬于一個(gè)新鮮事物。.NET4.0可以讓我們實(shí)例化對(duì)象而不需要為該對(duì)象定義類。如何理解“實(shí)例化對(duì)象而不需要為該對(duì)象定義類”,還是用代碼來(lái)解釋吧:
- private static Object GetAnonymousObj()
- {
- Object anonymousObj = new { UserName = "admin", Password = "1111" };
- return anonymousObj;
- }
這里并未在實(shí)例化對(duì)象前為anonymousObj對(duì)象建立相關(guān)的類,所以稱anonymousObj對(duì)象為匿名對(duì)象。
二、.NET 4.0中將匿名對(duì)象作為函數(shù)返回值
回到本文開(kāi)頭引入的前言部分-- 匿名對(duì)象可以作為函數(shù)返回值么?在.NET4.0中這個(gè)已經(jīng)成為現(xiàn)實(shí)。
請(qǐng)看一下代碼范例,將匿名對(duì)象作為返回值:
- private static Object GetAnonymousObj()
- {
- Object anonymousObj = new { UserName = "admin", Password = "1111" };
- return anonymousObj;
- }
很簡(jiǎn)單的一段代碼,讓我們將anonymousObj這個(gè)匿名對(duì)象作為了函數(shù)返回值。但是在調(diào)用該函數(shù)時(shí)發(fā)現(xiàn)了問(wèn)題,我們沒(méi)法這樣做:
- Object obj = GetAnonymousObj();
- Console.WriteLine(obj.UserName); // 這里將無(wú)法編譯。因?yàn)閛bj對(duì)象是Object類型。
因此在.net3.5時(shí),我告訴同事這個(gè)還是不要這樣實(shí)現(xiàn)的好。換個(gè)方法吧?當(dāng).NET4.0時(shí)代來(lái)臨時(shí),我們的問(wèn)題得到妥善的解決 ---- 首先由Dynamic 類型隆重登場(chǎng):(Dynamic簡(jiǎn)單介紹)
先將上文中的GetAnonymousObj函數(shù)改造成返回dynamic 類型:
- private static dynamic GetAnonymousObj()
- {
- dynamic anonymousObj = new { UserName = "admin", Password = "1111" };
- return anonymousObj;
- }
接著調(diào)用GetAnonymousObj()方法:
- static void Main(string[] args)
- {
- dynamic o = GetAnonymousObj();
- Console.WriteLine(o.UserName);
- Console.ReadKey();
- }
輸出>>admin.
匿名對(duì)象也許在您的項(xiàng)目中運(yùn)用的并不是很多,但我的項(xiàng)目大部分是建立在LinqToSQL的基礎(chǔ)上,所以我們常常會(huì)寫出這樣的代碼:在LINQ查詢語(yǔ)句中使用匿名對(duì)象。比如:
view sourceprint?1 var user = from user in Users
2 select new { user.Name, user.Id} //匿名對(duì)象
三、.NET中匿名對(duì)象的其他注意事項(xiàng)
匿名對(duì)象繼承于System.Object。
匿名對(duì)象屬性均為只讀屬性(ReadOnly)。
在同一個(gè)程序集內(nèi),兩個(gè)匿名對(duì)象具有相同的屬性、相同的屬性順序。編譯器將認(rèn)為這兩個(gè)匿名對(duì)象是相同的。
最后希望本篇文章可以給您帶來(lái)幫助,如有不足之處歡迎指出,謝謝!
文章標(biāo)題:解釋.NET之匿名對(duì)象(AnonymousObject)
URL鏈接:http://www.5511xx.com/article/cdcphhj.html


咨詢
建站咨詢
