精华内容
下载资源
问答
  • 在网上找了一下,觉得这个帖子关于ByVal ByRef 说的比较清楚,所以就贴过来了。 Public Class A Private _size As Int32 Public Property size() Get Return _size End Get Set(ByVal...

    在网上找了一下,觉得这个帖子关于ByVal 和 ByRef 说的比较清楚,所以就贴过来了。

    Public   Class   A
            Private   _size   As   Int32
           
            Public   Property   size()
                    Get
                            Return   _size
                    End   Get
                    Set(ByVal   Value)
                            _size   =   Value
                    End   Set
            End   Property
    End   Class

    Private   Sub   Form1_Load(ByVal   sender   As   System.Object,   ByVal   e   As   System.EventArgs)   Handles   MyBase.Load
                    Dim   a1   As   A
                    Dim   t   As   Int32
                    a1   =   New   A
                    a1.size   =   8
                    t   =   a1.size
                    updateA1ByVal(a1)
                    If   Not   IsNothing(a1)   Then
                            Console.WriteLine("a1   update   by   val   from   "   &   t   &   "   to   "   &   a1.size)
                    Else
                            Console.WriteLine("a1   changed   to   nothing   by   updateA1ByVal")
                    End   If
                    updateA1ByRef(a1)
                    If   Not   IsNothing(a1)   Then
                            Console.WriteLine("a1   update   by   ref   from   "   &   t   &   "   to   "   &   a1.size)
                    Else
                            Console.WriteLine("a1   changed   to   nothing   by   updateA1ByRef")
                    End   If
            End   Sub

            Private   Sub   updateA1ByVal(ByVal   a   As   A)
                    a.size   =   9
                    a   =   Nothing
            End   Sub

            Private   Function   updateA1ByRef(ByRef   a   As   A)
                    a.size   =   9
                    a   =   Nothing
            End   Function

    执行结果
    a1   update   by   val   from   8   to   9
    a1   changed   to   nothing   by   updateA1ByRef

            这个跟.net的后期绑定有关系,传递的参数实际上不是类A的一个对象,而是指向这个对象的一个值a1,   请注意a1本身不仅是一个符号,它有自己的值。
            byVal时,参数a的值和a1一样,所以都指向最初New出的那个实例(后期绑定)。当a.size先被修改为9时,因为最初New出的实例应经和它绑定,所以也被修改为9,然后参数a置为nothing,解除了绑定。(这里a 实际就相当一个指向a1的指针, 这个指针在指向a1对象的时候,所有的操作都会对a1对象产生作用.但是当a = Nothing, 或者 a1 指向其他对象实例的时候, a1本身就不会再受到a的影响了。)
            byRef时,参数a和a1一样(别名),所以当a被置为nothing时,a1也被置为nothing。

    套用一句大师的话
    In   C++:   pass   object   by   value   ,   pass   object   by   reference   。
    In   Java:   pass   object   reference   by   value
    也许我们可以这样说
    In   vb.net:   pass   object   reference   by   value (ByVal),   pass   object   by   reference(ByRef)。

    展开全文
  • VB中形参声明有两种方式,一种是ByVal,一种是ByRef,如果是ByVal则在传递参数时将实参的一个拷贝传递给子程序,子程序对参数的修改不会影响原有参数。如果是ByRef,则将实参的指针传递给子程序,子程序对参数的修改...
  • VBByvalByref的区别。

    千次阅读 2018-11-17 11:21:04
    1.byval是按值传递的方式,而byref是按地址的传递方式。 2.在程序中x是按值传递,而y是按地址传递,随后我们在程序中进行调用,因为在调用之前已经将z赋值为300,e赋值为400. 3.所以调用函数以后,按值传递的Z为...

    在这里插入图片描述
    1.byval是按值传递的方式,而byref是按地址的传递方式。
    2.在程序中x是按值传递,而y是按地址传递,随后我们在程序中进行调用,因为在调用之前已经将z赋值为300,e赋值为400.
    3.所以调用函数以后,按值传递的Z=300,而按地址传递的E=200,e即使被赋值,因为它是根据地址进行传递的,所以值依然不变。
    4.函数中,若没有特别注明按byval(按值)或者按byref(按地址)的传递方式的话,默认的是按地址byref的传递方式进行传递。

    展开全文
  • VBByval和byref的区别

    2019-03-20 09:47:01
    VBByval 和byref怎么区别?简单来说Byval是传值,byref是传地址,ByVal :表示该参数是按值方式传递的。ByRef :表示该参数按引用方式传递。下面绿茶小编为大家详细介绍Byval 和byref的区别。 1、引用参数(ref)在...

    在VB中Byval 和byref怎么区别?简单来说Byval是传值,byref是传地址,ByVal :表示该参数是按值方式传递的。ByRef :表示该参数按引用方式传递。下面绿茶小编为大家详细介绍Byval 和byref的区别。

    1、引用参数(ref)在可以作为引用参数在函数成员调用中传递之前,必须已明确赋值,而输出参数(out)在可以作为输出参数在函数成员调用中传递之前不一定要明确赋值,在该函数成员正常返回前都必须已明确赋值。

    2、在函数内部,引用参数(ref)被视为初始已赋值,输出参数(out)被视为初始未赋值。

    3、默认地,VB中的所有参数都是值传递。只有在参数的修饰符中明确包含out或ref,才是引用传递。但是需要知道的是,当参数的类型是引用类型时,你传递的是一个对象的引用而不是实际的对象。

    实例:

    sub Add1(ByVal no as int32)

    no=no+100

    end sub

    sub Add2(ByRef no as int32)

    no=no+100

    end sub

    private sub button1_click(sender as object,e as eventargs)handles button1.click

    dim a as int32

    a=100

    Add1(a)

    msgbox (“a的值为:” & a) '显示:a的值为100

    Add2(a)

    msgbox (“a的值为:” & a) '显示:a的值为200,因为Add2中的参数no为ByRef,即

    '按地址传递,因此在Add2中对no进行修改后,将会导致

    '源参数a的值也被修改。

    End Sub

    ByVal是传递值 源数据不会被修改,你可以把这个值当作自己的局部变量来使用;ByRef是传递地址,源数据可能被修改,你对这个变量的操作将对你传入的那个变量产生影响。
      
    https://www.jianshu.com/p/fe1f288be180

    展开全文
  • 日期:2021年04月26日 作者:Commas 注释:网络上没有一个比较系统的VB6或者VBA的教程,于是打算利用中午休息的时间写一写这...文章目录一、函数或过程参数修饰符关键字二、ByVal的探讨三、ByRef的探讨 一、函数或.

    日期:2021年04月26日
    作者:Commas
    注释:网络上没有一个比较系统的VB6或者VBA的教程,于是打算利用中午休息的时间写一写这方面的教程,不喜欢写得很文绉绉,一切都以常用为前提进行介绍。因为要覆盖更多读者,所以本系列文章有些地方可能会介绍比较地通俗易懂,当然也会包含一些比较有意思的知识点,不喜勿喷,有问题敬请指出,有疑惑欢迎留言,大家一起讨论,共同进步,谢谢大家(^ _ ^) (^ _ ^)


    目录


    一、函数或过程参数修饰符关键字

    修饰符说明
    ByVal表示修饰的参数按值传递
    ByRef表示修饰的参数按地址传递,ByRef是VB的缺省选项

    二、ByVal与ByRef的比较

    Option Explicit
    
    Private Sub Form_Load()
        Dim intA As Integer
        
        '初始值为1
        intA = 1
        Debug.Print "初始值--------->intA的地址:" & VarPtr(intA), "intA=" & intA
        
        'ByVal
        Call NumAddOne_ByVal(intA)
        Debug.Print "ByVal之后------>intA的地址:" & VarPtr(intA), "intA=" & intA
        
        'ByRef
        Call NumAddOne_ByRef(intA)
        Debug.Print "ByRef之后------>intA的地址:" & VarPtr(intA), "intA=" & intA
        
    End Sub
    
    Sub NumAddOne_ByVal(ByVal intX As Integer)
    On Error Resume Next
        intX = intX + 1
        Debug.Print "NumAddOne_ByVal-intX的地址:" & VarPtr(intX), "intX=" & intX
    End Sub
    
    Sub NumAddOne_ByRef(ByRef intX As Integer)
    On Error Resume Next
        intX = intX + 1
        Debug.Print "NumAddOne_ByRef-intX的地址:" & VarPtr(intX), "intX=" & intX
    End Sub
    
    立即窗口(控制台)输出结果:
    
    初始值--------->intA的地址:1701858       intA=1
    NumAddOne_ByVal-intX的地址:1701832       intX=2
    ByVal之后------>intA的地址:1701858       intA=1
    NumAddOne_ByRef-intX的地址:1701858       intX=2
    ByRef之后------>intA的地址:1701858       intA=2
    

    1、调用NumAddOne_ByVal,过程外部的intA=1(值未改变);而调用NumAddOne_ByRef,过程外部的值intA=2(值发生改变)

    2、NumAddOne_ByVal中的intX的地址与intA的地址不一样,应该是开辟了一个新的内存空间,并复制了变量的值,所以过程内部修改,修改的是另外一个内存空间,并不会影响过程外部的变量值;在这里插入图片描述

    3、NumAddOne_ByRef中的intX的地址与intA的地址是一样,操作的内存地址是一致的,也就是对同一个内存空间进行操作,那么无论内部或者外部修改,指向该内存空间所有变量的值都会发生改变,如intX=2,打印出来的intA=2;
    在这里插入图片描述


    版权声明:本文为博主原创文章,如需转载,请给出:
    原文链接:https://blog.csdn.net/qq_35844043/article/details/116150845

    展开全文
  • VB中的ByVal和ByRef的区别

    千次阅读 2017-07-21 11:59:59
    ByVal是按值传递,形参的改变不会造成实参的改变。ByRef是按地址传递,形参的改变会造成实参的改变。这就像是其它语言中的引用传递一样,如php中的 &$args举个例子:Module Module1 Sub Main() Dim i As...
  • 用代码的形式阐述了ByVal和ByRef的区别以及形参实参的区别。源码在VB.net 2010下调试通过。 欢迎指正!
  • VB.net byval和byref

    2013-04-22 16:30:00
    这两个的区别针对于一般的数据类型,大家都非常的清楚,但是,当用遇到对象类型的变量的时候,要小心了,因为,对象类型的变量里存放的是对象所占内存空间的首地址,此时,无论用byval还是byref,对该对象的内部成员...
  • vb.net中关于byval和byref的使用

    千次阅读 2012-11-27 17:26:00
    vb.net中,byval和byref使用是不同的: .NET中CLR的类型系统将对应简单值的类型同对应传统“对象”的类型区分开来。 前者被称为值类型(value type),后者被称为引用类型(reference type)。 值类型直接包含它们...
  • Byval Byref的区别

    千次阅读 2013-07-22 21:25:22
    VB中,提高过程和和函数,一定少不了参数,参数传递时过程中非常重要的问题。通过实际参数形式参数的传递可以实现调用过程被调用过程之间的信息交换。在这里首先要明白实参形参。举个例子吧: 假设定义一个...
  • VB API 编程声明函数时注意使用ByVal和ByRef
  • VBByValByRef有什么区别 ByValByRef(默认值)这两个是子过程的参数传递时,指定参数按什么传递的ByVal(按值传递)ByRef(按地址传递)具体这样来理解:过程中的参数列表,我们称形参调用过程时的参数列表,我们称...
  • 用实际代码的形式阐述了ByVal和ByRef的区别以及形参实参的区别。 源码在VB.net 2010下调试通过。 欢迎指正!
  • ByVal是按值传送,在传的...ByValByRef(默认值)这两个是子过程的参数传递时,指定参数按什么传递的ByVal(按值传递)ByRef(按地址传递) 具体可看下面例子: Dim A as integer,B as integerA=1B=2Call fun01(A,B)Pr...
  • VBByVal和ByRef

    千次阅读 2008-04-23 13:09:00
    这是vb中传值与传址的参数修饰 byval 是按值传送,在传的过程中不会改变原来的值,仅仅传送的是一个副本,而 byref 相反,从内存地址来说,后者是同一个内存地址ByVal为传值,当你把函数外的一个变量,如n传给ByVal的参数...
  • 'ByValByRef(默认值) 的区别 'ByVal 按值传递 不改变实参 'ByRef 按地址传递 改变实参 Private Sub Form_Load() Me.Show Dim A As Integer, B As Integer A = 1 B = 2 Call AAA(A, B) Print A, B '得到...
  • VB参数传递(传值ByVal与传址ByRef)[整理].pdf
  • byVal和byRef

    千次阅读 2009-03-17 16:11:00
    Tiger_Zhao真是个水平又高又耐心的好筒子,又帮我弄清楚了byVal和byRef的区别,小结在这里。 (1)VB里函数参数缺省是byRef的。(2)简单的说。byRef参数是传地址,当函数内部改这个参数的值的时候会反映到调用函数...
  • byval 和byref的区别,今天刚明白。

    千次阅读 2005-01-23 23:20:00
    以前看一本书上,写着VB的两种参数传递方式:byval byrefbyval叫做“传值”,想当于把值复制一份到新的变量中。而byref叫做传址,相当于把原变量的地址传过去。不过今天我发现,byref的传址,其实并非相当于C++中的...
  • Sub MySub(ByVal LoadList1 As List(Of String)) LoadList1.Add("A") LoadList1.Add("B") LoadList1.Add("C") End Sub Sub MySub1() MySub(List1) MsgBox(List1.Count) End Sub End Class
  • VBByRefByVal区别

    2019-09-22 08:53:15
    函数调用的参数传递有“值传递”“引用传递”两种传递方式。如果采用“值传递”,在函数内部改变了参数的值,主调程序的对应变量的值不会改变...在VBByRef表示引用传递,ByVal为值传递,VB默认采用引用传递,C ...
  • ByValByRef

    热门讨论 2017-03-19 20:59:53
    Byval 是按值传送,在传的过程中不会改变原来的值,仅仅传送的是一个副本,而 Byref 相反,从内存地址来说,后者是同一个内存地址 ByVal为传值,当你把函数外的一个变量,如n传给ByVal的参数时,在函数体内对该参数所做...
  • ByVal和ByRef的区别

    千次阅读 2005-04-25 10:07:00
    ByVal 传送参数内存的一个拷贝给被调用者。也就是说,栈中压入的直接就是所传的值。...ByVal是传递值 源数据不会被修改你可以把这个值当作自己的局部变量来使用ByRef是传递地址 , 源数据可能被修改你对
  • VB.Net的ByVal和ByRef --ByVal时的浅拷贝深拷贝,关键词是VB,B.,.N,Ne,et,t的,的B,By,yV,Va,al,l, B,By,yR,Re,ef,f-,--,-B,By,yV,Va,al,l时,时的,的浅,浅拷,拷贝,贝,深,深拷,拷贝,贝, ...
  • ByVal和ByRef有什么区别

    千次阅读 2007-05-05 13:43:00
    VBByVal和ByRef有什么区别原理: byval 是按值传送,在传的过程中不会改变原来的值,仅仅传送的是一个副本, 而 byref 相反,从内存地址来说,后者是同一个内存地址 区别: 就是变量如果以ByVal传递给过程,过程里有...
  • 初学VB.Net ,总结一下ByVal和ByRef 1 通过ByVal传递的变量,VB.Net会复制与源值相等的一个新的变量。而ByRef则相当于引用。 例如我们学习C的时候得Swap()函数 Imports System Test that Cant Swap A and B Class ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,514
精华内容 1,405
关键字:

byval和byrefvb