none
集合的觀念一問 RRS feed

  • 問題

  • Public Class test
      Public str As String
    End Class
    
      Dim a As New test
      a.str = "AA"
      Dim b As New ArrayList
      b.Add(a)
      a = Nothing
      MsgBox(CType(b(0), test).str)
    
    最後答案是"AA",想請問的是把物件加入集合,是怎樣的加法呢? 測試結果好像是複製一份的感覺而不是加個指標!!
    2010年10月4日 下午 04:03

解答

  • .Net 是算參照數。

    a = Nothing 是移除變數 a 的參照,並不是清空,而這時仍有一份參照為 b(0)。

    所以可以在 a = Nothing 上一行加入 a = "BB" 在看結果。


    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    提問時,錯誤情境描述與錯誤訊息很重要,情境描述包含你做了什麼,預期的結果與實際發生的結果。一個最爛的問法範例:「我的電腦電腦怎麼不能開機?」誰知道你家是不是沒電還是你根本找不到電源鈕。
    2010年10月5日 上午 03:53
  • Hi,

    依您的程式看來

    一開始建立了一個Test的物件實體與a的變數

    此時會把a變數指到Test物件實體

    然後你又造了一個b

    把b的第一個索引元素指到a所參照的Test物件實體

    最後你把a變數給指到Nothing

    b的第一個索引元素仍舊是指到當初所指定的Test物件實體

     


    謙卑學習,持之以恆,才能不斷的Level Up http://www.dotblogs.com.tw/larrynung/
    • 已標示為解答 小見光二 2010年10月5日 下午 03:14
    2010年10月5日 上午 04:45
  • 參閱[實值型別和參考型別 ],[Object 資料型別 ]

    其中提到

    使用物件資料型別

    您可以將參考型別或實值型別指派至 Object 資料型別的變數。Object 變數存放的永遠是資料的指標,而非資料本身。但是如果您將實值型別指派給 Object 變數,則此變數看起來就像是存放其本身的資料一般。如需詳細資訊,請參閱 Object 資料型別

     

    儲存區

    無論它所參考的資料型別為何,Object 變數都不會包含資料值本身,而是值的指標。它在電腦記憶體中所佔的空間為 4 個位元組,但這並不包括儲存表示變數值的資料。由於使用指標來找出資料的程式碼之故,存放實值型別的 Object 變數會比有明確型別的變數在存取方面要來得稍慢些。

     

     


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。
    • 已標示為解答 小見光二 2010年10月5日 下午 03:14
    2010年10月5日 下午 01:53
    版主

所有回覆

  • .Net 是算參照數。

    a = Nothing 是移除變數 a 的參照,並不是清空,而這時仍有一份參照為 b(0)。

    所以可以在 a = Nothing 上一行加入 a = "BB" 在看結果。


    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    提問時,錯誤情境描述與錯誤訊息很重要,情境描述包含你做了什麼,預期的結果與實際發生的結果。一個最爛的問法範例:「我的電腦電腦怎麼不能開機?」誰知道你家是不是沒電還是你根本找不到電源鈕。
    2010年10月5日 上午 03:53
  • Hi,

    依您的程式看來

    一開始建立了一個Test的物件實體與a的變數

    此時會把a變數指到Test物件實體

    然後你又造了一個b

    把b的第一個索引元素指到a所參照的Test物件實體

    最後你把a變數給指到Nothing

    b的第一個索引元素仍舊是指到當初所指定的Test物件實體

     


    謙卑學習,持之以恆,才能不斷的Level Up http://www.dotblogs.com.tw/larrynung/
    • 已標示為解答 小見光二 2010年10月5日 下午 03:14
    2010年10月5日 上午 04:45
  • 參閱[實值型別和參考型別 ],[Object 資料型別 ]

    其中提到

    使用物件資料型別

    您可以將參考型別或實值型別指派至 Object 資料型別的變數。Object 變數存放的永遠是資料的指標,而非資料本身。但是如果您將實值型別指派給 Object 變數,則此變數看起來就像是存放其本身的資料一般。如需詳細資訊,請參閱 Object 資料型別

     

    儲存區

    無論它所參考的資料型別為何,Object 變數都不會包含資料值本身,而是值的指標。它在電腦記憶體中所佔的空間為 4 個位元組,但這並不包括儲存表示變數值的資料。由於使用指標來找出資料的程式碼之故,存放實值型別的 Object 變數會比有明確型別的變數在存取方面要來得稍慢些。

     

     


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。
    • 已標示為解答 小見光二 2010年10月5日 下午 03:14
    2010年10月5日 下午 01:53
    版主