在C#中,StringBuilder类型的变量,如果需要引用传递参数,需要加ref或者out吗?

解决方案 »

  1.   

    string类型怎么传 StringBuilder就怎么传 这是我的理解。
      

  2.   

    StringBuilder很少用ref或者out。因为调用者很少有需要换一个StringBuilder,而是通常直接操作StringBuilder,比如:void Add(StringBuilder sb)
    {
      sb.Append("---------");
    }
      

  3.   

    我觉得不管是否是引用传参,最好都用ref来传递。
    比如:DataTable table=dal.GetTable(int UserID);
    public DoTable1(DataTable table){
       
    }public DoTable2(ref DataTable table){
       
    }//建议选择方式2,为什么呢,方式2很直观也很明确的告诉你了,ref可能在方法体内修改了DataTable的
    //值,方式一的话需要你理解C#的引用传递才知道DataTable的值被改了。
    //都使用ref方便后期维护的,一眼就看出来了。
      

  4.   

    一般参数都写string,用StringBuilder的时候 ToString一下
      

  5.   

    对于引用类型,加上ref,其实是引用的引用。
      

  6.   

    兄弟,加上ref更直观些,后期维护一眼就看出来了,至少ref这颜色是蓝色的
      

  7.   

    我说了,对于引用类型,加上ref,其实是引用的引用。也就是,加上ref,函数可以将这个引用指向另一个对象。不加上,函数不能改变引用的对象,但是可以改变引用的对象的状态。
      

  8.   

    应该引用的引用还是同一个对象吧。
    如果不加ref,函数还是可以把引用指向另外一个对象public void Test(DataTable table){
       table=new DataTable();
    }
      

  9.   

    概念不清。当然可以指向,但是形参不会影响实参。
    public void Test(int i)
    {
      i = 4; //难道不加ref就不能改变形参的值了么?只是这个更改不会影响到调用者。
    }
      

  10.   

    public void Test(DataTable table){
    table=new DataTable();
    }public void Test(ref DataTable table){
    table=new DataTable();
    }到底有没有什么影响啊,
    有的话,影响在哪里啊
      

  11.   

    至少我不会用ref  不用ref仍然还是可以返回dataTable的 感觉多此一举   原理不太清楚
      

  12.   

    ref,out都是传递的地址唯一不同的是,ref会将变量的初值传递到方法里,而out就需要再次赋值才可使用例如:static void Main(){
      int i=3;
      b(ref i);
      c(out i);
    }
    void b(ref i){ //在这里会将i的只也传递过来所以i为1
      i=i+1;       //i=1+1;i=2
    }
    void c(out i){//由于out不会传值
      i=i+1;      //所以系统会提示i没有赋初值,无法使用,报错
    }