zoukankan      html  css  js  c++  java
  • VB.net byval和byref

    概述

           byval是将实参所占的内存空间复制一份出来;byref是给实参另起一个别名,就好像是一个人两个名字。这两个的区别针对于一般的数据类型,大家都非常的清楚,但是,当用遇到对象类型的变量的时候,要小心了,因为,对象类型的变量里存放的是对象所占内存空间的首地址,此时,无论用byval还是byref,对该对象的内部成员的操作都是针对同一块内存空间。

    实例

    1、创建class1类,用户参数的传递用

    Public Class Class1
    '变量
    Private _name As String

    '属性
    Property name() As String
    '读操作
    Get
    Return _name
    End Get
    '写操作
    Set(ByVal value As String)
    _name = value
    End Set
    End Property
    End Class

    2、创建class2类,用于对参数的处理

    Public Class Class2
    Public Sub tryd(ByRef classx As Class1)
    '通过形参修改 name
    classx.name = "这个是《形参》操作的地址空间"
    End Sub
    End Class


    3、新建控制台应用程序,代码如下:

    Module Module1
    Sub Main()
    '定义class1类对象 进行参数的传递
    Dim s As New Class1
    s.name = "这个是《实参》操作的地址空间!"
    '定义class2类 逻辑运算
    Dim X As New Class2
    '执行参数
    X.tryd(s)
    '输出
    Console.WriteLine(s.name)
    '暂停画面
    Console.ReadLine()
    End Sub
    End Module

    运行3执行的结果如下图



    byref中的实参和形参是一个人两个名称吗?

    1、class1类和上面的一样

    2、创建class2类,用来进行逻辑运算

    Public Class Class2
    Public Sub tryd(ByRef classx As Class1)
    '形参的对象中创建新的class1
    Dim y As New Class1
    '赋值
    y.name = "一个人,两个名称"

    '给形参赋值
    classx = y
    End Sub
    End Class

    3、新建控制台应用程序

    Module Module1
    Sub Main()
    '定义class1类对象 进行参数的传递
    Dim s As New Class1
    '赋值
    s.name = "不是同一个人,两个名称!"

    '定义class2类 逻辑运算
    Dim X As New Class2
    '执行
    X.tryd(s)

    '输出实参的name属性
    Console.WriteLine(s.name)

    '暂停画面
    Console.ReadLine()
    End Sub
    End Module

    执行3的结果如下图


  • 相关阅读:
    [BZOJ1691][Usaco2007 Dec]挑剔的美食家
    [BZOJ1056][BZOJ1862][HAOI2008][Zjoi2006]排名系统
    [POJ2892]Tunnel Warfare
    [BZOJ1588][HNOI2002]营业额统计
    [BZOJ1503][NOI2004]郁闷的出纳员
    [HDU4507]吉哥系列故事——恨7不成妻
    [codeforces 55]D. Beautiful numbers
    [HDU3709]Balanced Number
    [COJ0528]BJOI幸运数
    [TimusOJ1057]Amount of Degrees
  • 原文地址:https://www.cnblogs.com/jiangu66/p/3035761.html
Copyright © 2011-2022 走看看