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


  • 相关阅读:
    php环境配置中各个模块在网站建设中的功能
    PHP+Apache+MySQL+phpMyAdmin在win7系统下的环境配置
    August 17th 2017 Week 33rd Thursday
    August 16th 2017 Week 33rd Wednesday
    August 15th 2017 Week 33rd Tuesday
    August 14th 2017 Week 33rd Monday
    August 13th 2017 Week 33rd Sunday
    August 12th 2017 Week 32nd Saturday
    August 11th 2017 Week 32nd Friday
    August 10th 2017 Week 32nd Thursday
  • 原文地址:https://www.cnblogs.com/fuyingke/p/450004.html
Copyright © 2011-2022 走看看