程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> Visual C# 3.0新特性概覽(3)

Visual C# 3.0新特性概覽(3)

編輯:關於C語言
C# 2.0,使用匿名方法,你必須這樣重寫代碼:

class Program
{
 delegate void DemoDelegate();
 static void Main(string[] args)
 {
  DemoDelegate myDelegate = delegate()
  {
   Console.Writeline("Hiya!!");
  };
  myDelegate();
 }
}

盡管匿名方法對基於方法的委托調用更進了一步,但是Lambda表達式允許你用更加簡潔,功能性的格式寫匿名方法。

你可以將Lambda表達式作為一個參數列表來編寫代碼,跟在=>後面,再跟上一個表達式或者語句。以上的代碼可以用如下的代碼替換:

class Program
{
 delegate void DemoDelegate();
 static void Main(string[] args)
 {
  DemoDelegate myDelegate = () => Console.WriteLine("Hiya!!") ;
  myDelegate();
 }
}

盡管Lambda表達式顯得更加簡潔,實際上他們也是一個匿名方法的功能性超集。特別的,Lambda表達式提供了如下的額外的功能:

·它們允許參數類型是被推斷的。匿名方法要求你必須清楚的陳述每個類型的狀態。

·它們可以支持查詢表達式或C#語句。

·它們可以被看作使用表達式樹的數據。這是不能用匿名方法來做的。

查詢表達式

這個特性使得你可以在C#中使用SQL類似風格的語句,也被稱作LINQ(語言集成查詢)。

舉例來說,你可以這樣描述你的數據:

ublic class CoOrdinate
{
 public int x ;
 public int y;
}

在C#裡,你可以像下面一樣輕松的聲明一個數據庫表的邏輯等同式:

// Use Object and collection initializers
List<CoOrdinate> coords = ... ;

現在你的數據可以作為一個collection來實現 IEnumerable<T>,你可以輕松的像如下方式查詢數據:

var filteredCoords =
from c in coords
where x == 1
select (c.x, c.y)

在以上SQL風格的格式中,"from"、"where"和"select"是查詢表達式,用到了C# 3.0的一些特性如匿名類型,擴展方法,隱式類型本地變量等。這樣,你可以使用SQL風格的格式,將無聯系的數據整合一起來工作。

每個查詢表達式實際上轉變為一個C#的調用,如:

where x == 1

將會轉換為:

coords.where(c => c.x == 1)

你可以看到,這個看上去很像一個可怕的Lambda表達式和擴展方法。C# 3.0還有其他很多關於它們的查詢表達式和規則。

表達式樹

C# 3.0包含了一個新類型,允許表達式能夠當作運行時的數據使用。這個類型,System.Expressions.Expression<T>,只是一個內存中一個lambda表達式的重新表達。結果是你的代碼可以在運行時修改和檢查Lambda表達式。

如下是一個表達式樹的例子:

Expression<DemoDelegate> filter = () => Console.WriteLine("Hiya!!") ;

使用如上的表達式樹的方法,你可以使用過濾器變量中的各種屬性來檢查樹的內容。

結束語

C# 3.0提供了一些新的特性,使得你可以更輕松的完成一個程序員和架構設計師的工作,同時也保持了程序語言的嚴謹和清晰的結構。

C# 3.0目前還處於襁褓中,還將在未來的數月中長大,但是它所能改變的一切,緊靠其強大的後盾.Net框架,它的體系結構和設計模式,值得你的關注。A

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