作者kucom (kucom)
看板Visual_Basic
标题Re: [.NET] VB.NET中参考及物件的问题
时间Thu May 28 01:14:18 2009
感谢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