你这里是用对象的引用,既对象的别名。当使用byval时,它再不是传值调用,而是引用调用了。

解决方案 »

  1.   

    对,Byval并没有拷贝对象,只是拷贝了一个引用,函数中的操作还是对这个对象的。
      

  2.   


    老兄:我仔细看了你的代码,发现问题出在你的认识上。
    对一个对象来说,“NEW”才能给它一个拷贝并分配内存空间;对你的代码剖释如下:
    1、你在 Command1_Click 后调用了Call CallableAnywhere(mc1First);
    2、Public Sub CallableAnywhere(ByVal c1 As Class1)
        c1.Comment = "22222222222222"
    End Sub
       你想把对象class作为一个拷贝传送,想法不错,但你在代码里实际上传送过去的是“mc1First”,它是一个在 FORM 里面定义的“旧”对象,而不是一个新对象;
       对象只按地址传送--如果没有 NEW 的话。
       实际上你并没有“NEW c1”
       这样一来,当然就是你看到的结果了。如果
    Public Sub CallableAnywhere(ByVal c1 As Class1)
        Dim c2 As New Class1
        c1.Comment = "22222222222222"
        c2.Comment = "33333333333"
    End Sub当然你就可以看到C1 和C2的Comment 是不一样的。