不去考虑这个参数是否会在目标函数发生改变。是否有节省开销之说?是【推荐】,还是【避免】?

解决方案 »

  1.   

    ref 关键字使参数按引用传递。其效果是,当控制权传递回调用方法时,在方法中对参数所做的任何更改都将反映在该变量中。若要使用 ref 参数,则方法定义和调用方法都必须显式使用 ref 关键字。
    传递到 ref 参数的参数必须最先初始化。这与 out 不同,out 的参数在传递之前不需要显式初始化。(请参见 out。)
    尽管 ref 和 out 在运行时的处理方式不同,但它们在编译时的处理方式是相同的。因此,如果一个方法采用 ref 参数,而另一个方法采用 out 参数,则无法重载这两个方法。
    这是MSDN上的解释。
      

  2.   

    节省开销意味着牺牲性能
    要在另一个方法内改变值类型参数的值,就要用到ref
      

  3.   

    ref 一般针对的是值类型,object的子孙基本不考虑使用它比如,一个方法会返回几个指标值,因为是多个,如果不用集合类型的话,就只能用ref这种方式了public void Point(ref int x, ref int y, ref char z) 
    {
    // do something
    }
      

  4.   

    我明白您的意思。
    我的问题是:不考虑参数的更改情况下,这个ref是推荐,还是避免?
      

  5.   

    避免根据实际需要去做!不是一定每个方法有参数都加个ref上去!
      

  6.   

    LZ根本就没搞清楚Ref的意思。
    C#和C++不一样,除了struct对象外,默认传递的就是指针(或者说就是引用)。所以普通的对象你加ref的话相当于用了指针的指针,换句话说,你在函数内使用那个变量的时候要解引用两次,效率大打折扣。
    至于少见的struct对象,如果长度少于一个机器字长,比如int32或者float,short,byte,char等,用了ref也会浪费地解引用一次,效率依然要差。
    只有当我们用一个很大的很少见的struct对象的时候,ref才能因为传指针而减少拷贝而提高效率。
      

  7.   


    是滴!许多人用c的那点东西往.net上套,经常出现问题。
      

  8.   

    所谓byval,当传递参数是对象时,其实就是指针,所以ref反而浪费了资源。
      

  9.   

    哦,呵呵,我也习惯了“指针说“了。其实.net中的对象引用跟c中的指针也是完全不一样的东西。对象引用是相当复杂的对象,而不是一个简单的c指针。只是,我们有时可以用c指针打个比方罢了。