最近在看ASP.NET 的MVC2編程模型,發現裡面有一種很奇怪的this用法,以前從沒有見過,經過2個小時的翻閱資料尋找終於得出了結論,和大家分享一下(可能理解有不全面的地方,希望大家指正)
public static string ScheduleEntries(this HtmlHelper helper, ...)
這個是我在一個外國論壇上搜到的問題,下面有句回答是:
The way it works for MVC is that Html
in the view is a property of HtmlHelper type on the ViewPage class.
我大概理解了下,意思好像是說 “把視圖中的HTML作為一個htmlhelper類型的屬性”,這裡面的Html只什麼一直不是很明白,猜測應該是指只當前對象吧,也就是把當前對象作為HtmlHelper的一個參數。通過這句話我只能理解到這裡了。
後來又看到了一個MVC寫的分頁控制項,裡面也有同樣的寫法:
public static IPagedList<T> ToPagedList<T>(this IEnumerable<T> source, int pageIndex, int pageSize, int totalCount){return new PagedList<T>(source, pageIndex, pageSize, totalCount);}
然後看了下是怎麼調用該方法的,發現只要是繼承了IEnumerable<T>介面的都可以調用該方法,並且第一個參數隱藏了,這樣就比較清晰了,這裡的ToPagedList<T>(…)方法被添加到繼承介面IEnumerable<T>的類中,此方法帶有this的那個參數則自動預設為擁有該方法的當前對象,理解了這些就可以在方法體中大膽的發揮了。
private IList<Product> allProducts = new List<Product>();IpagedList<Product> ProductList this.allProducts.ToPagedList(currentPageIndex, defaultPageSize)
上面兩行代碼是對如何調用擁有this關鍵字方法的舉例,希望能給大家起到協助,協助大家理解。有不對的地方,也歡迎大家指正.