閑來無聊,隨便看下asp.net Mvc 的收穫

來源:互聯網
上載者:User
        從星期一,一直無聊到今天,老闆都沒安排我事做,但是他們都忙得要死。

        星期二的時候,看了幾篇心理學的文章。裡面說,人不知道在做什麼的時候,有兩種選擇: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 ”,這就是現象和本質的區別。      結案!                      甚矣,吾之不慧!    

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.