看板 Visual_Basic 關於我們 聯絡資訊
※ 引述《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: 118.168.236.89