作者Peruheru (还在想)
看板Visual_Basic
标题Re: [.NET] VB.NET中参考及物件的问题
时间Wed May 27 19:06:24 2009
※ 引述《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