最近在看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关键字方法的举例,希望能给大家起到帮助,帮助大家理解。有不对的地方,也欢迎大家指正.