看板 Visual_Basic 關於我們 聯絡資訊
感謝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