首页 > 代码库 > 扩展方法的理解(个人愚见)
扩展方法的理解(个人愚见)
在 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 }
调用就不需要在引入命名空间
扩展方法的理解(个人愚见)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。