对象怎么进行值传递?
FUNCTION MYFUN(BYVAL OBJ AS CLASS1)
OBJ.NAME=="ABCDEFG"
END FUNCTION
SUB TT()
DIM A AS NEW CLASS1 'CLASS1是自己定义的类模块
A.NAME="123456'
CALL MYFUN(A)
MSGBOX A.NAME '些时,A.NAME的内容是ABCDEFG,希望其保持不变,仍是123456
END SUB
问题点数:100、回复次数:21Top
1 楼LGYAN(紫衣随想)回复于 2004-09-01 15:09:55 得分 30
对象是按地址进行传递的,如果希望保存原有对象的内容,
请重新定义一对象,并将对象的属性按需要要传递的对象的属性设置!!!Top
2 楼rainstormmaster(暴风雨 v2.0)回复于 2004-09-01 15:10:57 得分 20
你的程序相当于:
DIM A AS NEW CLASS1 'CLASS1是自己定义的类模块
A.NAME="123456'
A.NAME="ABCDEFG"
MSGBOX A.NAME
你说A.NAME此时能为"123456"吗?
我估计你可能是想讨论一下深度复制,是这样吗?
Top
3 楼atai2002(阿泰)回复于 2004-09-01 15:24:39 得分 0
是的,楼上两位前辈明白我的意思了,请指条明路。不盛感激!!Top
4 楼atai2002(阿泰)回复于 2004-09-01 15:29:22 得分 0
只是希望将对象的值传到其他地方去,以后对这个值的改变都不影响原先的对象。Top
5 楼supergreenbean(超级绿豆(MSMVP - VB) - 升级归来~)回复于 2004-09-01 15:33:45 得分 10
恐怕不行,只能让你的对象自己保存状态。vb里对象的byval只不过是调用了一次iunkown.addref,增加了对象的一次引用而已。Top
6 楼LGYAN(紫衣随想)回复于 2004-09-01 15:45:03 得分 0
麻烦一点做吧,一个一个的复制
private functoin CopyObj(byref obj as class1) AS class1
dim t as new class1
t.属性A=obj.属性A
t.属性B=obj.属性B
.....
set copyobj=t
end function
Top
7 楼LGYAN(紫衣随想)回复于 2004-09-01 15:54:11 得分 0
或者在Class1中定义方法Copy()
代码如下
public function Copy() as Class1
dim t as new class1
t.属性A=Me.属性A
t.属性B=Me.属性B
.....
set Copy=t
end functionTop
8 楼atai2002(阿泰)回复于 2004-09-01 15:58:22 得分 0
不能做成一个一个的复制,要做成一个通用的方法,所有的类模块都要使用的。Top
9 楼flyingZFX(卍 南无阿弥陀佛 卍)回复于 2004-09-01 16:01:51 得分 10
晕倒,不可能的,所有的类模块???
晕,大哥,你的脑子不清楚吧,
做为一个类来做,每个类都是应该是一个独立的对象,是一个个体,
都应该有自己的Copy函数(方法),做成统一的,,呵呵,你没事吧,Top
10 楼LGYAN(紫衣随想)回复于 2004-09-01 16:02:22 得分 0
那就没办法了,VC中的对象我看他的代码也是在类中有一个Copy方法的!!Top
11 楼LGYAN(紫衣随想)回复于 2004-09-01 16:06:37 得分 0
其实如果你真的不想让按收你对象的方法改变了你对象中的值的话,那么你就把你对象中的关键值做为参数传递而去,让那个方法去根据输入参数去自己初始化一个对象!!Top
12 楼atai2002(阿泰)回复于 2004-09-01 16:12:15 得分 0
to LGYAN(紫衣随想)
由于要做成通用的方法,所有的类的属性都是不一样的,不能确定哪个是关键值。vb的类中有没有类似Copy的方法?Top
13 楼LGYAN(紫衣随想)回复于 2004-09-01 16:43:55 得分 0
我很不幸的告诉你一句,不行, 即使是VC也是一样要自己复制的!!当然也包括VB.
不要偷懒,一个一个搞吧!!!!Top
14 楼superxiaomm(小美)回复于 2004-09-01 17:04:47 得分 5
因改是byref把,因为你是传值给他而不是传地址Top
15 楼tzmchf(男贵人)回复于 2004-09-01 17:25:02 得分 5
老是弄不明白Byval ByRef的区别?Top
16 楼rainstormmaster(暴风雨 v2.0)回复于 2004-09-01 20:20:20 得分 0
不用一条一条的写,你可以尝试用Iserializable接口和ICloneable接口实现,这在.net中很容易实现,但用vb实现它们,你会发现还不如一条一条的写来的方便Top
17 楼viena(维也纳N02)回复于 2004-09-01 21:25:55 得分 10
对于对象来说,不管用Bybal还是Byref,传得其实都是指针,区别是ByRef传的是指向指针的指针,可以在过程中修改它,使之指向别的对象Top
18 楼viena(维也纳N02)回复于 2004-09-01 21:28:54 得分 0
Bybal对于简单类型是传值,复制到过程里的,对于对象,其实是引用传递Top
19 楼flyingscv(zlj)回复于 2004-09-01 21:30:10 得分 10
vb不支持这个Top
20 楼atai2002(阿泰)回复于 2004-09-02 08:32:26 得分 0
to rainstormmaster(暴风雨 v2.0)
Iserializable接口和ICloneable接口怎么实现?
不是我偷懒,而是现在还不能完全知道会有那些类模块,不能一条条的来写,不管有多麻烦,都想试试看。Top
21 楼atai2002(阿泰)回复于 2004-09-02 11:16:26 得分 0
upTop




