Visual_Basic 板


LINE

感谢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







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:Soft_Job站内搜寻

TOP