首页 > 代码库 > 扩展方法的理解(个人愚见)

扩展方法的理解(个人愚见)

 在 aspx 中由于没有用到服务器控件,就没有 __VIEWSTATE 这个asp.net产生的 隐藏域 保存在浏览器(客户端),IsPostBack 就无法使用了。但又要判断是否用户请求了页面,但又因 IsPostBack 无法使用了,这时我们是不是考虑自己手写一个方法~

 

 由于会有多个页面会用到 IsPostBack 方法,这时就考虑封装。

 

 

 扩展方法使你能够向现有类型“添加”方法,而无需创建新的派生类型、重新编译或以其他方式修改原始类型。 扩展方法是一种特殊的静态方法,但可以像扩展类型上的实例方法一  样进行调用。

 

(MSDN)上的解释    http://msdn.microsoft.com/zh-cn/library/bb383977.aspx

 

 

 扩展方法:必须是静态类、静态方法、this关键字(命名空间最好在扩展对象的命名空间一致)

 1 using System; 2 using System.Web; 3  4 namespace It.Mall.Utility 5 { 6     public static class RequestExt 7     { 8         public static bool IsPostBack(this HttpRequest request) 9         {10             return request.HttpMethod.Equals("post", StringComparison.InvariantCultureIgnoreCase);11         }12     }13 }

ps:  HttpMethod 获得用户的数据传输方法,有可能大小写不区分,可以使用 String 类中 ToUpper 的静态方法(转成大写进行比较或者小写 ToLower 的静态方法),但是这样转大小写比较好么?为什么?,这样不好,因为字符串有个特性,对于这个特性也是老生常谈的事情了(可能有些人已经想到了),就是拘留池(大量创建会消耗内存和性能)  在这里引用

孤傲苍狼的博客 http://www.cnblogs.com/xdp-gacl/p/3541074.html  当然你们也可以自己去搜索,这里就不细说了。

那么我们可以使用 Equals 方法比较,但为什么又要用 Equals 呢?微软都提供了枚举类型的,而且 Equals 的性能比较 == 的效率要高 干嘛不用呢~~~(瞎说的,大神忽略~~~)

 

命名空间没有和扩展对象的命名空间一致,调用起来比较麻烦

 

 1 using System; 
3
using It.Mall.Utility;//这里需要引入命名空间 4 5 namespace Itheima.Mall.WebApp.account 6 { 7 public partial class login : System.Web.UI.Page 8 { 9 10 protected void Page_Load(object sender, EventArgs e)11 {12 Request.IsPostBack(); //调用起来比较麻烦
13 
14     }
15   }
16 }

 

 

与 命名空间最好在扩展对象的命名空间一致

 1 using System; 2 using System.Web; 3  4 namespace System.Web 5 { 6     public static class RequestExt 7     { 8         public static bool IsPostBack(this HttpRequest request) 9         {10             return request.HttpMethod.Equals("post", StringComparison.InvariantCultureIgnoreCase);11         }12     }13 }

 

调用就不需要在引入命名空间

 

扩展方法的理解(个人愚见)