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对标准的就是这么践踏的,呵呵


  • 相关阅读:
    Linux下命令行安装weblogic10.3.6
    11g新特性:Health Monitor Checks
    Oracle/PLSQL: ORA-06550
    DBMS_NETWORK_ACL_ADMIN
    【RDA】使用RDA(Remote Diagnostic Agent)工具对数据库进行健康检查
    ORA-39242 错误
    Yii2 中常用的增删改查操作总结
    PHP递归函数return返回null的问题
    PHP中生成随机字符串,数字+大小写字母随机组合
    使用layer.msg 时间设置不起作用
  • 原文地址:https://www.cnblogs.com/fuyingke/p/450004.html
Copyright © 2011-2022 走看看