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 ”,这就是现象和本质的区别。

          结案!
         
                     甚矣,吾之不慧!
        

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

  • 相关阅读:
    【摘录】面试官也许会这样问你....
    asp.net 面试题 【摘要】
    sql子查询
    c# 设计模式 之:简单工厂、工厂方法、抽象工厂之小结、区别
    C#编程:AOP编程思想
    EF Core 保存数据
    详解C#中的反射
    .Net Core RSA加解密,签名
    Sql Server帮助类
    c# DbfHelper 帮助类
  • 原文地址:https://www.cnblogs.com/zlfucku/p/1583772.html
Copyright © 2011-2022 走看看