CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VB >  基础类

对象怎么进行值传递?

楼主atai2002(阿泰)2004-09-01 14:52:19 在 VB / 基础类 提问

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

相关问题

  • jsp怎么向servlet传递对象?
  • 把对象作为值传递?
  • 对象的传递
  • 100分求怎么向webservice传递自定义对象??
  • 如何将用户对象的值传递给窗口?
  • 怎样将用户对象的值传递给窗口?
  • 用request.setAttribute()方法传递对象,取的时候是null,怎么回事?
  • 请问C#中的数组对象的传递方式是怎么样的?
  • 对象传递的问题
  • Socket如何传递对象?

关键词

  • 属性
  • 模块
  • 接口
  • 指针
  • vb
  • 对象
  • 传递
  • 类
  • byref
  • 方法

得分解答快速导航

  • 帖主:atai2002
  • LGYAN
  • rainstormmaster
  • supergreenbean
  • flyingZFX
  • superxiaomm
  • tzmchf
  • viena
  • flyingscv

相关链接

  • Visual Basic类图书
  • Visual Basic类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo