VB中对象的如何实现赋值
我的E-mail: LWWVB@netease.com
本人编程经验:高中时开始自学编程,学过C++,BASIC,数据结构,软件基础等……,是一位很热度的编程狂人。
1. VB函数过程的值传递对象问题。
例:有一个Class1类,声明为:
Public data1 As Integer
Public data2 As Integer
测试程序中有两个过程:
Sub test1 (Byval obj As Class1) ‘值传递参数使用Byval
obj.data1=5 ‘改变参数中的数据
obj.data2=6
End Sub
Sub test2 (Byval obj As Class1)
Dim temp as New Class1
temp.data1=obj.data1
temp.data2=obj.data2
temp.data1=5
temp.data2=6
End Sub
主程序:
Sub Main()
Dim obj1 As New Class1 ‘第一个测试
obj1.data1=111
obj1.data2=222
test1 obj1
Debug.Print obj1.data1,obj1.data2
‘obj1对象的data1显示为5,data2为6,它的属性已改变,值传递对象失败
‘其实我也知道test1中的参数是值传递对象引用,不是值传递对象。
‘本人为解决对于不能值传递对象,采用test2的解决方案
‘第二个测试
Dim obj2 As New Class1
obj2.data1=111
obj2.data2=222
test2 obj2
Debug.Print obj2.data1,obj2.data2
End Sub
‘obj2的属性未改变,这表示值传递对象成功。
‘不过,象test2的方法太麻烦了,值传递对象可不可以象test1中这样简洁?
‘我的解决方案是否最简?
2. 从第一个问题引发出第二个问题,就是对象的复制问题。
如:有一个类型A,有两个变量x,y (都是A类型),
就可以采用 x=y 的赋值语法。此时x变量里的数据完全与y相等。
但是VB的对象就不能用 obj1=obj2 的形式。
只能用 set obj1=obj2 的形式。
但set语句只是把一对象引用指向另一对象引用,不是数据内容的复制。
怎样才能很好实现对象间的复制呢?可不可以用 “=”?
为此,我也想出了一个解决方案:就是在类中加入Copy方法,例:
有一个类ClassA,内容如下:
Public D1 As Integer ‘D1、D2其实为属性,在此简化为公共变量
Public D2 As Integer
Sub Copy (OtherObj As ClassA)
D1=OtherObj.D1
D2=OtherObj.D2
End Copy
…… ……
主程序如下:
Sub Main( )
Dim objA As New ClassA
Dim objB As New ClassA
objA.D1=111
objA.D2=222
objB.Copy objA
End Sub
‘Copy方法减少了两个对象赋值时经常出现的 “=”语句。
但如果ClassA中有私有数据,又没有直接改变此私有数据的属性或方法时
Copy方法就不管用了
例:ClassA中还有一私有数据:
private x As Integer
Copy方法改为:
Sub Copy (OtherObj As ClassA)
D1=OtherObj.D1
D2=OtherObj.D2
x=OtherObj.x ‘此句不能运行,不能存取对象的私有数据
End Copy
又如果ClassA中含有其它对象、很多的私有数据,Copy方法将变得十分复杂,难以维护。
有什么更好的方法处理对象间的复制问题?
望先生请教……