程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C#高級程序設計(一)——從接口到代理到匿名方法到lambda表達式

C#高級程序設計(一)——從接口到代理到匿名方法到lambda表達式

編輯:C#入門知識

問題背景:使用Sort方法對Product對象進行排序。
下面是Sort方法的兩個簽名:
[csharp] 
public void Sort(Comparison<T> comparison); 
public void Sort(IComparer<T> comparer); 

其中一個是接收實現了IComparer<T>接口的對象,另一種是接收Comparison<T>代理。
一、使用接口對象
[csharp] 
class ProductNameComparer : IComparer<Product> 

public int Compare(Product x, Product y) 

return x.Name.CompareTo(y.Name); 


... 
List<Product> products = Product.GetSampleProducts(); 
products.Sort(new ProductNameComparer()); 
foreach (Product product in products) 

Console.WriteLine(product); 

二、使用代理
[csharp] 
public int Compare(Product x, Product y) 

    return x.Name.CompareTo(y.Name); 

 
List<Product> products = Product.GetSampleProducts(); 
products.Sort(Compare); 
foreach (Product product in products) 

Console.WriteLine(product.Name); 

思考:接口和代理究竟有怎樣的區別和聯系?
接口是類/對象的契約,代理是方法的契約;接口對象只能指向實現了接口的類對象,代理對象只能指向實現了方法簽名的方法。
三、匿名方法
匿名方法是代理的進一步擴展,它能將代碼塊傳遞給代理對象。下面使用匿名方法對上面代碼進行改寫。
[csharp] 
List<Product> products = Product.GetSampleProducts(); 
products.Sort(delegate(Product x, Product y) 
{ return x.Name.CompareTo(y.Name); } 
); 
foreach (Product product in products) 

Console.WriteLine(product); 

四、lambda表達式
lambda表達式是一個匿名函數,它可以包含表達式和語句,並且可用於創建委托和表達式樹類型,下面使用lambda表達式對上面代碼進行改寫。
[csharp] 
List<Product> products = Product.GetSampleProducts(); 
products.Sort((x, y) => x.Name.CompareTo(y.Name)); 
foreach (Product product in products) 

Console.WriteLine(product); 

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