从星期一,一直无聊到今天,老板都没安排我事做,但是他们都忙得要死。

星期二的时候,看了几篇心理学的文章。里面说,人不知道在做什么的时候,有两种选择:1,什么都不做。2,去做点什么。
于是我昨天尝试着什么都不做,上上网,看看非技术书籍的书。结果发现,下午的时候,人就眼花了,然后脑袋一片空白,晚上回去,感觉精神有点恍惚,并且一直眼花。
今天早上,第一个想法,去做点什么。无聊翻开asp.net mvc,想学习学习看看别人怎么设计东西的。然后就看到一段代码,

public static void EndForm(this HtmlHelper htmlHelper)

这个方法的类是在 System.Web.Mvc.Html.FormExtensions 里的。一时看到这个 this,不知道有何用意?开始绞尽脑汁回想我那屁大专教育让我学的N门编程语言,里面是否有这个语言细节,还是没回想起来。于是乎开始 google,找了半年,就找到C# 函数参数类型名称前的就是 ref params out,三个修饰符。没有发现 this 的作用,于是乎,我又试着把这个 this 去掉,看会不会报错。结果编译通过。
偶然看到一位兄台的一篇文章,他回答的问题跟我的疑问风马牛不相及,但是他提供了一个方法,自己写点代码,自己去试一试,从头到尾的看看具体有什么不同。
于是乎,我写了两个的类
public class TestClass
{
    public string MyName
    {
        get;
        set;
    }

public TestClass()
    {
        //
        //TODO: 在此处添加构造函数逻辑
        //
    }

public static string GetDefault()
    {
        return "he";
    }
}

public static class StaticClass
{
    public static void Show(this TestClass test)
    {
        HttpContext.Current.Response.Write(test.MyName);
    }
}
我的想法,是不是要这个 this, 才可以在静态方法中调用这个 TestClass 中的数据。结果去掉 this,测试一下CodeCode
    protected void Page_Load(object sender, EventArgs e)
    {
        TestClass test = new TestClass();
        test.MyName = "me";
        StaticClass.Show(test);
    }
毫无问题,显示 "me"。去掉Show 里面的 this 也没有问题。于是我想想,是不是对方法的访问会产生什么影响,
我增加了一个方法,就在增加一个方法的时候,出现了下图的东西,
观察发现,这个外部类可以调用 这个静态类里面的两个静态方法,不是说静态类没有 this 指针吗?但是如果真的可以这样
调用,那么就可以为 TestClass 在不改变他源代码的基础上去增加一个方法。我再在 asp.net mvc 里面去查找 
public static MvcForm BeginForm
的所有引用,发现没有任何函数调用他。而 StaticClass 中的 Show方法,查找所有引用,却可以找到他的调用对象。这是
为什么呢?为什么写这个 BeginForm 没人调用? Ms 的技术人员吃饱了没事写个方法做摆设?
此时,仔细这个命名空间 System.Web.Mvc.Html.Extension , 关键字在 Extension. 一下答案和现象串联了起来。可以为
一个类在不改变源代码的情况下增加一个方法,不就是为了扩展方法的吗????由此总结,这种
public static void 方法名(this 类 )
是为了扩展某个类的方法而使用的一种技巧,非常神奇,原来那个类,都不用自己主动为自己写方法,调用时便可以获得一个别
人帮你写好的一个方法。
看来搜关键字,应该是为 “程序后续版本扩展” 或者 “为程序扩展方法”,而我先搜的却是 “方法名参数标识符”, “为什么方法参数中会有 this ”,这就是现象和本质的区别。
结案!
甚矣,吾之不慧!

闲来无聊,随便看下asp.net Mvc 的收获相关推荐

  1. ASP.NET MVC 入门4、Controller与Action

    本系列文章基于ASP.NET MVC Preview5. Controller是MVC中比较重要的一部分.几乎所有的业务逻辑都是在这里进行处理的,并且从Model中取出数据.在ASP.NET MVC ...

  2. [转]自定义ASP.NET MVC JsonResult序列化结果

    本文转自:http://blog.163.com/luckcq@yeah/blog/static/17174770720121293437119/ 最近项目中前台页面使用EasyUI的jQuery插件 ...

  3. 深入ASP.NET MVC之七:ActionResult的执行(View的加载和渲染)

    书再接回上文Filter和Action的执行 ,当Action方法被执行,返回了一个ActionResult之后,紧接着就要执行ActionResult了,当然还有Filter需要执行,这些都是发生在 ...

  4. ASP.NET MVC 后台中 设置 js提示

    /// 放在前台页面中@if (TempData["message"] != null) {<script type="text/javascript"& ...

  5. 自定义ASP.NET MVC JsonResult序列化结果

    最近项目中前台页面使用EasyUI的jQuery插件开发中遇到,EasyUI Form中的Datebox组件绑定ASP.NET MVC返回的DateTime类型的数据错误,因为ASP.NET MVC返 ...

  6. 通过源代码研究ASP.NET MVC中的Controller和View(二)

    通过源代码研究ASP.NET MVC中的Controller和View(一) 在开始之前,先来温习下上一篇文章中的结论(推论): IView是所有HTML视图的抽象 ActionResult是Cont ...

  7. ASP.NET MVC使用Bootstrap系统(2)——使用Bootstrap CSS和HTML元素

    ASP.NET MVC使用Bootstrap系统(2)--使用Bootstrap CSS和HTML元素 阅读目录 Bootstrap 栅格(Grid)系统 Bootstrap HTML元素 Boots ...

  8. ASP.NET MVC – 关于Action返回结果类型的事儿(上)

    本文转自:博客园-文超的技术博客 一.         ASP.NET MVC 1.0 Result 几何? Action的返回值类型到底有几个?咱们来数数看. ASP.NET MVC 1.0 目前一 ...

  9. Asp.net mvc 知多少(一)

    本系列主要翻译自<ASP.NET MVC Interview Questions and Answers >- By Shailendra Chauhan,想看英文原版的可访问http:/ ...

  10. ASP.NET MVC 1.0 Result 几何?

    Action的返回值类型到底有几个?咱们来数数看. ASP.NET MVC 1.0 目前一共提供了以下十几种Action返回结果类型: 1.       ActionResult(base) 2.   ...

最新文章

  1. 以比特币现金(BCH)为核心的慈善经济体系革新业态
  2. php怎么将表格导出到excel表格,php怎么将excel表格数据-php 怎么把数据导出到excel表格...
  3. BZOJ1084 SCOI2005最大子矩阵
  4. c在linux中怎样执行文件,如何在Linux中编译和运行C/C+程序,简单示例教懂你
  5. winform 自适应屏幕分辨率具体操作和注意事项
  6. 作业三--阅读《构建之法》1-5章
  7. 在spring配置中出现的问题,解决方案
  8. 新能源汽车涨价潮继续 奇瑞新能源、极狐汽车宣布跟进涨价
  9. 使用dos下的命令行,也可以完成wifi连接。
  10. 新概念英语(1-95)Tickets,please!
  11. 【树莓派】树莓派常用的一些源
  12. JAVA计算机毕业设计网上零食进销存(附源码、数据库)
  13. django rest framework serializer 增加自定义字段
  14. 10个提升写作手法的方法
  15. Baizhi Memcached GJF
  16. python-给登记照换底色(蓝底变红底)
  17. android手机图片质量,安卓手机对比iOS照片在微信分享时,竟大幅深压缩画质?...
  18. word格式刷刷完格式后公式上凸了怎么办?
  19. 冲激函数与冲激函数相乘与冲激函数对冲激函数卷积之间的区别
  20. Python ❀ 插入排序

热门文章

  1. 2015-11-23 12:50:55
  2. 【ML小结10】集成学习
  3. RNA_seq(1)植物转录组实战(下)之DESeq2进行差异基因分析
  4. 最新python中一升级所有已安装的包方法
  5. 【POJ 2449】第K短路【A*算法】
  6. 基础集合论 第二章 9 族
  7. idea引不进jdk的包_idea install 时提示jdk的某个jar包的包不存在的问题
  8. 153.寻找旋转排序数组中的最小值(力扣leetcode) 博主可答疑该问题
  9. 合并报表编制采用的理论_跟我一起学合并报表之——长期股权投资的抵消处理...
  10. netfilter 和 iptables