感謝P大的回覆
看了您的文之後 我整理一下
(1)
Dim benz as new car()
Dim MyCar as car
MyCar=benz
MyCar參考指向benz,等於benz這個物件,二者存取同個記憶體配置
(2)
Dim benz as new car()
Dim MyCar as car
benz=MyCar
原本benz有自已的記憶體配置,有自已的資料成員,是執行實體的個體(物件)
但benz指向MyCar後,就成了參考,放棄原本的記憶體配置
在語法上是沒有錯的,只是benz由物件成了參考?
請問記憶體配置在benz指向MyCar時會自動釋放掉嗎? 還是一直存在至程式結束?
(3)
Dim benz as new car()
Dim ford as new car()
ford=benz
請問如果左右二邊都是物件,都有自已的記憶體配置及資料成員,
這樣的寫法有錯嗎? 語法上有錯嗎?
物件可以去承接物件嗎?
若可以,這樣的寫法,會導致個別的記憶體配置如何處理?
ford與benz都指向同個記憶體配置(benz)嗎?
ford原本的記憶體配置會自動釋放掉?
或是ford,benz有個別自已的記憶體配置,只是ford的資料成員跟benz一樣,
等於benz copy一份給ford?
感謝大家的解答~
※ 引述《Peruheru (還在想)》之銘言:
: ※ 引述《kucom (kucom)》之銘言:
: : 請問一下以下問題:
: : (1)
: : Dim benz as new car()
: : Dim BMW as new car()
: : Dim MyCar as car ===>宣告MyCar為car的參考
: : MyCar=benz ===>將MyCar指向benz,故MyCar,benz是指同一個物件,
: : 讀取同樣的記憶體配置
: : 那我可以這樣寫嗎?
: : Dim MyCar as new car()
: : MyCar=benz
: : 這樣的寫法有錯嗎?
: : MyCar有自已的記憶體配置,還可以指向其他的物件嗎?
: MyCar在使用New關鍵字時,配置了一整塊屬於它的空間
: 但benz沒有
: 就像MyCar跟benz原本都是一張設計圖
: 而MyCar使用了New方法取得一堆材料製成一輛車
: benz此時還只是一張設計圖
: 但你卻要求將MyCar的內容「換成那張設計圖」
: 這個在語法上沒有錯,但是會造成兩者都只剩下設計圖
: 原本製造出來的車子就消失不見了
: : (2)
: : Dim MyCar as car 是什麼意思?
: : 是指宣告成car的參考,所以只能去接由car類別new出來的物件嗎?
: 是這樣沒錯,但如果裡面有是基礎型態的成員,如Integer
: 那就可以直接指定這個成員的值(有使用過New的話,沒使用過New不能給值)
: : (3)
: : 假如
: : Dim benz as new car()
: : Dim ford as new car()
: : 可以這樣寫嗎?
: : benz=ford
: : 無論本身是物件或是參考都可以承接同樣型態的值嗎?
: : 若不行,是為何?
: : 若要去接物件,一定要用參考去接嗎?
: : 像這樣
: : Dim MyCar as car
: : MyCar=ford
: : 還是只要承接的型態是相同,都可以,
: : 像這樣
: : benz=ford 是成立的?
: 參考如果給他一個物件
: 其實就等於將這個物件給予一個別名
: 以後面你的做法來說
: 等於是幫ford這輛車取了一個叫做Benz的別名
: 不管對誰存取,都是修改到同一輛車
: 而前面的情況,則會致使Benz放棄本身的實體車輛,轉變成為Ford的別名
: : (4)
: : 之前有看到一本書這樣寫,不是很懂它的寫法:
: : Dim ds as new dataset
: : ds.ReadXml("person.xml")
: : dim dc as DataColumn=ds.Tables("學生").columns("學號")
: : 這裡的dc是物件還是參考? 為什麼可以這樣寫? dc去承接同類別的物件嗎?
: : ds.Tables("學生").columns("學號") ===>是DataColumn的物件嗎? 所以dc才可以去接
: : 那寫成dim dc as new DataColumn=ds.Tables("學生").columns("學號") 可以嗎?
: : 謝謝大家!
: 這邊就不多說了,觀念跟上面一樣
: 只要等號右邊的東西是一個經過New出來的物件
: 就可以給予任何型態相同的類別參考
: 舉個例子好了
: 假如開一個Window Form
: 在Class底下直接宣告全域變數 Dim benz As Car (假定有Car這個類別)
: 然後接著在Form.Load的事件處理函式裡面
: 打入 Dim myCar As Car = New Car()
: 下一行打 benz = myCar
: 這三行程式代表的意義
: 就是我宣告有個叫做Banz的車,但是目前這輛車不存在
: 然後我自行創造了一個叫做myCar得新車,沒有其他標籤,就叫做myCar
: 此時Benz公司覺得我設計的車子不錯,要讓我的車子掛Benz的才出去賣
: 所以就讓剛剛那輛還沒有實體的車,指向我剛剛創造出來的新車
: 此時Benz就指向我所創造的那輛車,但同時這輛車也仍然保有myCar這個名字
: 只不過,一離開Form.Load函式以後
: 因為離開了宣告myCar的範圍
: 理論上剛才那輛創出來的車子因為失去名字應該會消失
: 但是你剛剛在全域變數幫它取了一個叫做Benz的名字
: 所以這輛車直到程式結束或是你自行銷燬之前(Benz = nothing)
: 都會保持存在供你存取和利用
: 這樣看得懂嗎?
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 218.170.105.9