程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C#3.0匿名方法的實現與應用(4)

C#3.0匿名方法的實現與應用(4)

編輯:關於C語言

3. 匿名方法機理

上面介紹了我們應當怎樣使用匿名類型,下面我們通過閱讀一些IL代碼來看看編譯器究竟為我們做了哪些工作。下面的代碼演示了一個簡單的匿名類型和匿名類型變量的調用,我們來看看編譯器是怎麼處理的。

namespace AnonymousTest
{
class UserInfo
{
public string firstname;
public string lastname;
public int age;
public string address;
//...
}
class Program
{
static void Main(string[] args)
{
List<UserInfo> infoList = new List<UserInfo>();
var result = from userinfo in infoList
where userinfo.age > 20 && userinfo.age < 35
select new { userinfo.firstname, userinfo.lastname };
foreach (var var_info in result)
{
Console.WriteLine(var_info.firstname + " " + var_info.lastname);
}
}
}
}

很簡單的一段代碼,首先我們定義了一個UserInfo類,其中定義了一些屬性,firstname,lastname等等,這裡為了簡單,我們直接使用公有變量,而不使用屬性來表示了。接下來就是我們的Program類,在這個類中我們定義了集合變量,由於這裡僅僅為了做演示,所以實際上我並沒與往集合中添加成員,但已足夠讓CLR生成它的結構然後我們定義了result變量去取得它的檢索結果,注意我們返回的是一個匿名類型。接著我們使用freach循環將其打印出來。

下面我們打開VS的命令行窗口,輸入命令ildasm,在打開的窗口中,選擇File->Open打開我們編譯好的文件,大家會看到如下界面:

大家可以看到,CLR在IL層實際上是為我們新建了一個特殊的類,其中包含了firstname, secondname的屬性,當然與之對應的還定義了一些set,get方法,此外,CLR還為這個類額外重載了以下方法,像Equals,ToString等等。這樣我們定義的一些匿名類型就能夠被編譯器所識別出來。

以上只是對匿名類型做了一個簡單的介紹,有興趣的朋友們可以從兩方面繼續研究它,一方面是工程上的應用,一方面繼續探索IL代碼的密碼,無論是哪一個方面,我想你都會有很大收獲的。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved