zoukankan      html  css  js  c++  java
  • 闲来无聊,随便看下asp.net Mvc 的收获

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

            星期二的时候,看了几篇心理学的文章。里面说,人不知道在做什么的时候,有两种选择: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,测试一下
              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 ”,这就是现象和本质的区别。

          结案!
         
                     甚矣,吾之不慧!
        

    走向地狱的途中,不小心走了程序员这条路,路上一个个黑心的老板,和暗无天日的加班,我才发现,通往地狱的路径中,我们这行是最短的。

  • 相关阅读:
    JAVA 之 JSTL
    IDEA 之 ERROR:无法在web.xml或使用此应用程序部署的jar文件中解析绝对uri:[http://java.sun.com/jsp/jstl/core]
    JAVA 之 EL表达式
    IDEA 之 ERROR:端口被占用
    【ubuntu】windows+ubuntu 设置windows为第一启动项
    【ubuntu】Error: environment block too small. Press any key to continue
    Navicat premium15安装破解教程
    通过django中间件和python魔法方法实现自定义session(通过文件存储session)
    每日作业 7/2
    每日作业 7/1
  • 原文地址:https://www.cnblogs.com/zlfucku/p/1583772.html
Copyright © 2011-2022 走看看