none
使用New建立物件跟圖形介面建立物件的差別 RRS feed

  • 問題

  • 想要請問一下各位,
    再撰寫程式的時候使用New建立物件,
    跟在圖形介面直接建立物件這兩種方法有甚麼樣的差別?
    使用New來建立物件做動態的產生是很方便,可是我不太明白使用New來建立物件有沒有甚麼樣的缺點呢?
    謝謝各位

    2012年1月6日 下午 02:11

解答

  • 這個問題問的很不錯, 因為這背後隱藏著不少重要的基本知識, 絕對不是一個"也是"就可以打發掉的問題.

    首先你要先瞭解在 CLR 中型別有分為實值型別與參考型別, 你可以看 http://msdn.microsoft.com/zh-tw/library/t63sy5hs%28VS.90%29.aspx 的說明, 讀明白這兩種型別的差異, 會對你未來寫程式有幫助.

    那New 關鍵字是什麼意思 ? 這代表調用建構函式某個物件實體化, 也就是讓某個物件在記憶體中建立出來, 如果你這樣宣告一個按鈕

    Dim button1 As Button

    其實你只是產生了一個變數, 它的型別是Button, 而這個變數的參考並沒有指向任何一個物件, 這有一個觀念, 參考型別的變數並非物件本身, 它只是裡面的參考可能指向某個物件或或是沒有指向任何東西.

    當程式變成

    Dim button1 As New Button()

    拆開來看就等於

    Dim button1 As Button

    button1=New Button()

    上面的程式說明 New 關鍵字會使得程式調用那個型別的建構函式來在記憶體產生物件, 這裡又多了一個觀念叫做建構函式, 這個觀念你可以看http://msdn.microsoft.com/zh-tw/library/hks5e2k6.aspx

    還有一個觀念叫生命週期, 如果一個參考型別變數被宣告在 Sub 或 Function中, 你產生出來的實體如果沒有和其它的變數關聯的狀況下, 當Sub 或 Function 結束後這個實體將會成為一個沒有任何參考指向它的東西, 於是就會在GC的過程中被回收.

    New 絕對不是個簡單的東西, 重要的是你應該要去瞭解 New 背後代表的真正含意, 這樣對寫程式技巧的提升才有幫助.

    2012年1月6日 下午 03:52
  • 您好

    您可以參考下圖操作,看一下 Form.Designer.vb,搭配河蟹魂前輩的說明去看


    歡迎參觀我的Blog.NET菜鳥自救會
    • 已標示為解答 memories_tc 2012年1月7日 上午 01:19
    2012年1月6日 下午 11:17
    版主

所有回覆

  • 在圖形介面建立也是用New,但是Visual Studio會幫你完成其他控制項(也就是你說的圖形物件)加入Form裡的程式碼

    你打開 Form1.Designer.vb 就可以知道Visual Studio幫你完成多少事

    2012年1月6日 下午 02:30
  • 這個問題問的很不錯, 因為這背後隱藏著不少重要的基本知識, 絕對不是一個"也是"就可以打發掉的問題.

    首先你要先瞭解在 CLR 中型別有分為實值型別與參考型別, 你可以看 http://msdn.microsoft.com/zh-tw/library/t63sy5hs%28VS.90%29.aspx 的說明, 讀明白這兩種型別的差異, 會對你未來寫程式有幫助.

    那New 關鍵字是什麼意思 ? 這代表調用建構函式某個物件實體化, 也就是讓某個物件在記憶體中建立出來, 如果你這樣宣告一個按鈕

    Dim button1 As Button

    其實你只是產生了一個變數, 它的型別是Button, 而這個變數的參考並沒有指向任何一個物件, 這有一個觀念, 參考型別的變數並非物件本身, 它只是裡面的參考可能指向某個物件或或是沒有指向任何東西.

    當程式變成

    Dim button1 As New Button()

    拆開來看就等於

    Dim button1 As Button

    button1=New Button()

    上面的程式說明 New 關鍵字會使得程式調用那個型別的建構函式來在記憶體產生物件, 這裡又多了一個觀念叫做建構函式, 這個觀念你可以看http://msdn.microsoft.com/zh-tw/library/hks5e2k6.aspx

    還有一個觀念叫生命週期, 如果一個參考型別變數被宣告在 Sub 或 Function中, 你產生出來的實體如果沒有和其它的變數關聯的狀況下, 當Sub 或 Function 結束後這個實體將會成為一個沒有任何參考指向它的東西, 於是就會在GC的過程中被回收.

    New 絕對不是個簡單的東西, 重要的是你應該要去瞭解 New 背後代表的真正含意, 這樣對寫程式技巧的提升才有幫助.

    2012年1月6日 下午 03:52
  • 您好

    您可以參考下圖操作,看一下 Form.Designer.vb,搭配河蟹魂前輩的說明去看


    歡迎參觀我的Blog.NET菜鳥自救會
    • 已標示為解答 memories_tc 2012年1月7日 上午 01:19
    2012年1月6日 下午 11:17
    版主
  • 謝謝各位的回覆
    2012年1月7日 上午 01:24