zoukankan      html  css  js  c++  java
  • VB.NET 对于类型的传递按值或者按引用

    VB.NET 对于类型的传递按值或者按引用,(byval byref) C# 多了个out。

    有时候面试的时候我会问个小问题,嘿嘿,看看对C#基本的语法有没有熟悉。

    比如

    public void XXX( byval form as Form)

    public void XXX(byref form as Form)

    有啥区别?其实很简单对应为C++ 就是 void XXX( Form * form) 跟 void XXX(Form **form)

    所谓的按照值传递跟引用传递都有一个基本的问题就是谁的值,谁的地址。

    以上的两个方法,第一个传递的是Form这个对象的地址这个值。所以在第一个方法中你这样写

    form.xxx=zzz //可以更改原来form对象的值

    form=New Form()

    form.xxx=yyy;

    事实上,不会影响原来form的值。

    而第二个就不一样,他传递的是地址的地址,所以他可以更改原来form的值。

    这个问题放到WebService 中就更奇怪了。

    [WebMethod()]
    public void XXX( byval p as Person)

    [WebMethod()]
    public void YYY( byref p as Person)

    我们都说webservice是没有状态的,那么第一个方法跟第二个方法有啥区别呢?第一个方法中如果也是类似的代码,他能够影响客户端传递给他的对象的状态吗? 第二个呢?

    看看微软的实现,才发现他做了很多诡异的代码。

    看看他的第二个方法的WSDL,明明return的是void的,他应是给你返回一个对象。

    <soap:Body>
        <HelloWorldpersonResponse xmlns="http://tempuri.org/">
          <p>
            <Name>string</Name>
          </p>
        </HelloWorldpersonResponse>
      </soap:Body>

    然后客户端的代理做什么操作呢?呵呵。以下代码

     Public Sub HelloWorldperson(ByRef p As Person)
                Dim results() As Object = Me.Invoke("YYY", New Object() {p})
                p = CType(results(0),Person)
            End Sub

    MS对标准的就是这么践踏的,呵呵


  • 相关阅读:
    bzoj2669 [cqoi2012]局部极小值 状压DP+容斥
    bzoj2560 串珠子 状压DP
    bzoj2004 [Hnoi2010]Bus 公交线路 矩阵快速幂+状压DP
    「校内训练 2019-04-23」越野赛车问题 动态dp+树的直径
    bzoj5210 最大连通子块和 动态 DP + 堆
    动态 DP 学习笔记
    bzoj4987 Tree 树上背包
    bzoj1190 [HNOI2007]梦幻岛宝珠 背包
    bzoj1004 [HNOI2008]Cards Burnside 引理+背包
    bzoj4922 [Lydsy1706月赛]Karp-de-Chant Number 贪心+背包
  • 原文地址:https://www.cnblogs.com/fuyingke/p/450004.html
Copyright © 2011-2022 走看看