传递对象时有关ByVal和ByRef的快速问题 [英] Quick question about ByVal and ByRef when passing objects

查看:83
本文介绍了传递对象时有关ByVal和ByRef的快速问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

你好,


刚刚遇到这个问题,并且想知道是否某人

可以解释它,因为它有点困惑我。 />
假设我有以下课程:


公共类CTest

私人m_objCMember作为CMember

公共职能addMember(ByVal objMember As CMember)

m_objCMember = objMember

结束功能

结束班级


Public Class CMember

Public strFirstName As String

Public strLastName As String

End Class


And下面使用它们的代码:


Private Sub Button1_Click(ByVal sender As System.Object,ByVal e As

System.EventArgs)处理Button1.Click

Dim objTest As New CTest

Dim objMember As New CMember


objMember.strLastName =" last name"

objMember.strFirstName ="名字"

objTest.addMember(objM ember)


objMember.strFirstName =" TEST FIST NAME"

End Sub


我怎么来的运行最后一行代码(objMember.strFirstName =" TEST

FIST NAME")

- 属性objTest.m_objCMember.strLastName中的值更改为

TEST FIST NAME同样。

我想在VB中按值传递参数时,它只传递一个

的副本对象或变量

但不是参考!

我在这里遗漏了什么吗?

提前一百万感谢

干杯,

德米特里

Hi there,

Just came across this problem and was wondering if someone
can shed a light on it as it somewhat puzzles me.
Suppose I have the following classes:

Public Class CTest
Private m_objCMember As CMember
Public Function addMember(ByVal objMember As CMember)
m_objCMember = objMember
End Function
End Class

Public Class CMember
Public strFirstName As String
Public strLastName As String
End Class

And the following code that uses them:

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click
Dim objTest As New CTest
Dim objMember As New CMember

objMember.strLastName = "last name"
objMember.strFirstName = "First name"

objTest.addMember(objMember)

objMember.strFirstName = "TEST FIST NAME"
End Sub

How come when I run the last line of code (objMember.strFirstName = "TEST
FIST NAME")
- the value in the property objTest.m_objCMember.strLastName changes to
"TEST FIST NAME" as well.
I thought in VB when you pass parameters by value, it just passes a copy of
the object or variable
but not the reference!
Am I missing something here?
Thanks a million in advance
Cheers,
Dmitry

推荐答案

" Dmitry" < - @ mail.com> schrieb
"Dmitry" <--@mail.com> schrieb
为什么我运行最后一行代码(objMember.strFirstName =
TEST FIST NAME)
- 属性中的值objTest.m_objCMember.strLastName更改
到TEST FIST NAME同样。
我想在VB中按值传递参数时,它只传递对象或变量的副本
而不是参考文件!
How come when I run the last line of code (objMember.strFirstName =
"TEST FIST NAME")
- the value in the property objTest.m_objCMember.strLastName changes
to "TEST FIST NAME" as well.
I thought in VB when you pass parameters by value, it just passes a
copy of the object or variable
but not the reference!




您的类是引用类型。 ByVal确实传递了一份副本,但是

参考的副本,而不是对象的副本。


另见:
http://groups.google.com /groups?selm...ews.freenet.de

-

Armin


如何报价以及为什么:
http://www.plig.net/nnq /nquote.html
http:// www。 netmeister.org/news/learn2quote.html



Your class is a reference type. ByVal does pass a copy, but a copy of the
reference, not a copy of the object.

see also:
http://groups.google.com/groups?selm...ews.freenet.de
--
Armin

How to quote and why:
http://www.plig.net/nnq/nquote.html
http://www.netmeister.org/news/learn2quote.html


>我在这里错过了一些东西吗?

i可能是错的但我认为是这样的


我认为在VB中按值传递参数时,它只是传递一份副本
> Am I missing something here?
i could be wrong but i think so

I thought in VB when you pass parameters by value, it just passes a copy of
对象或变量
但不是引用!
正确

但Dim objTest为新CTest
Dim objMember为新CMember
您创建对象

objMember.strLastName ="姓氏
objMember.strFirstName ="名字"
为objMember分配值

objTest.addMember(objMember)
将对此objMember实例的引用添加到objtest(objmember

can''被克隆)所以它很重要它是byval它仍然是1

实例(希望我在这里没有太大的错误)

objMember.strFirstName =" TEST FIST NAME
更改实例(它们被视为同一个对象,因此它在两个位置都会更改




除非您实现克隆函数返回

同一个班级的新实例。


如果我错了纠正我,我总是想学习:)


希望它有所帮助


eric


" Dmitry" < - @ mail.com>在留言中写道

news:c6 ************ @ ID-94059.news.uni-berlin.de ...你好,
假设我有以下课程:

Public Class CTest
私人m_objCMember作为CMember
公共职能addMember(ByVal objMember作为CMember)
m_objCMember = objMember
结束职能
结束课

公共课CMember
Public strFirstName As String
Public strLastName As String
End Class

以下代码使用它们:

Private Sub Button1_Click (ByVal sender As System.Object,ByVal e As
System.EventArgs)处理Button1.Click
Dim objTest As New CTest
Dim objMember As New CMember

objMember .strLastName ="姓氏"
objMember.strFirstName =& ;名字

objTest.addMember(objMember)

objMember.strFirstName =" TEST FIST NAME"
End Sub
为什么我运行最后一行代码(objMember.strFirstName =" TEST
FIST NAME")
- 属性objTest.m_objCMember.strLastName中的值更改为
" TEST FIST NAME同样。
我想在VB中按值传递参数时,它只传递对象或变量的副本

而不是参考!
我在这里遗漏了什么?
提前一百万感谢
干杯,
Dmitry
the object or variable
but not the reference! Correct
but Dim objTest As New CTest
Dim objMember As New CMember You create your objects
objMember.strLastName = "last name"
objMember.strFirstName = "First name" assign values to objMember
objTest.addMember(objMember) add a reference to this instance of objMember to the objtest (objmember
can''t be cloned) so it dousnt matter much that it is byval it still is the 1
instance (hope im not to much wrong here)
objMember.strFirstName = "TEST FIST NAME" change the instance (they are sill regarded as the same object so it changes
on both locations)

unless you implement a clone function that returns a new instance of the
same class you will have this.

If i''m wrong correct me, i always want to learn :)

hope it helps

eric

"Dmitry" <--@mail.com> wrote in message
news:c6************@ID-94059.news.uni-berlin.de... Hi there,

Just came across this problem and was wondering if someone
can shed a light on it as it somewhat puzzles me.
Suppose I have the following classes:

Public Class CTest
Private m_objCMember As CMember
Public Function addMember(ByVal objMember As CMember)
m_objCMember = objMember
End Function
End Class

Public Class CMember
Public strFirstName As String
Public strLastName As String
End Class

And the following code that uses them:

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click
Dim objTest As New CTest
Dim objMember As New CMember

objMember.strLastName = "last name"
objMember.strFirstName = "First name"

objTest.addMember(objMember)

objMember.strFirstName = "TEST FIST NAME"
End Sub

How come when I run the last line of code (objMember.strFirstName = "TEST
FIST NAME")
- the value in the property objTest.m_objCMember.strLastName changes to
"TEST FIST NAME" as well.
I thought in VB when you pass parameters by value, it just passes a copy of the object or variable
but not the reference!
Am I missing something here?
Thanks a million in advance
Cheers,
Dmitry



它只传递价值在堆栈上创建的项目。从我读过的东西中唯一的

在堆栈上创建的东西是值类型

变量(十进制,整数等)和结构。类都是在托管堆上创建的,这是设计使用的引用类型。

" Dmitry" < - @ mail.com>在留言中写道

news:c6 ************ @ ID-94059.news.uni-berlin.de ...
It only passes the value on items that are created on the Stack. the only
things that are created on the stack from what I''ve read are valuetype
variables (decimal,integer, etc) and structures. Classes are all created on
the managed heap, which by design uses reference types.
"Dmitry" <--@mail.com> wrote in message
news:c6************@ID-94059.news.uni-berlin.de...
你好在那里,

刚刚遇到这个问题,并想知道是否有人能够解释它,因为它有点困惑我。
假设我有以下课程:

Public Class CTest
私人m_objCMember作为CMember
公共职能addMember(ByVal objMember作为CMember)
m_objCMember = objMember
结束职能
结束职等 Public strFirstName As String
Public strLastName As String
End Class

以下代码使用它们:

Private Sub Button1_Click(ByVal sender As System.Object,ByVal e As
System.EventArgs)处理Button1.Click
Dim objTest As New CTest
Dim objMember As New CMember

objMember.strLastName ="姓氏"
objMember.strFirstName ="名字"

objTest.addMember(objMember)

objMember.strFirstName =" TEST FIST NAME"
End Sub
为什么我运行最后一行代码(objMember.strFirstName =" TEST
FIST NAME")
- 属性objTest.m_objCMember.strLastName中的值更改为
TEST FIST NAME同样。
我想在VB中按值传递参数时,它只传递对象或变量的副本

而不是参考!
我在这里遗漏了什么?
提前一百万感谢
干杯,
德米特里
Hi there,

Just came across this problem and was wondering if someone
can shed a light on it as it somewhat puzzles me.
Suppose I have the following classes:

Public Class CTest
Private m_objCMember As CMember
Public Function addMember(ByVal objMember As CMember)
m_objCMember = objMember
End Function
End Class

Public Class CMember
Public strFirstName As String
Public strLastName As String
End Class

And the following code that uses them:

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click
Dim objTest As New CTest
Dim objMember As New CMember

objMember.strLastName = "last name"
objMember.strFirstName = "First name"

objTest.addMember(objMember)

objMember.strFirstName = "TEST FIST NAME"
End Sub

How come when I run the last line of code (objMember.strFirstName = "TEST
FIST NAME")
- the value in the property objTest.m_objCMember.strLastName changes to
"TEST FIST NAME" as well.
I thought in VB when you pass parameters by value, it just passes a copy of the object or variable
but not the reference!
Am I missing something here?
Thanks a million in advance
Cheers,
Dmitry



这篇关于传递对象时有关ByVal和ByRef的快速问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆