C#里非基础类型传参数都是以引用类型的方式,
那么换句话说,out和ref除了基础类型外,实际上没有任何意义?
是不是这么个意思?

解决方案 »

  1.   

    没看懂什么问题,不过我就记的ref调用前赋值,out后赋值,函数中值的改变会影响原来的值
      

  2.   

    不能这么说,ref对于引用 类型也是有意义的,另外你所说的基础类型应该更正为结构类型(框架,自定义,等)
      

  3.   

    对于引用类型来说
    不加out和ref,你可以修改这个对象的属性
    加了out和ref,你可以使这个变量指向一个新的对象~
      

  4.   

    看看下面别人发过的你就明白了
    using System.Collections.Generic; 
    using System.Text; 
    using System; namespace ConsoleApplication1 

        class Value 
        { 
            public int i = 15; 
        } 
        class Program 
        { 
            static void Main(string[] args) 
            { 
                Program t = new Program(); 
                t.first(); 
            } 
            public void first() 
            { 
                int i = 5; 
                Value v = new Value(); 
                v.i = 25; 
                second(v, i); 
                Console.WriteLine(v.i);//20 
            } 
            public void second(Value v, int i) 
            { 
                i = 0;  
                v.i = 20; 
                Value val = new Value(); 
                v = val;//此处t被指向了val的地址,和原先的v断开了联系
                Console.WriteLine(v.i + " " + i + " ");//15,0 
            } 
        } 

    15 0 
    20 
    using System.Collections.Generic; 
    using System.Text; 
    using System; namespace ConsoleApplication1 

        class Value 
        { 
            public int i = 15; 
        } 
        class Program 
        { 
            static void Main(string[] args) 
            { 
                Program t = new Program(); 
                t.first(); 
            } 
            public void first() 
            { 
                int i = 5; 
                Value v = new Value(); 此时v.i=15,i=5 
                v.i = 25; 
                second(ref v, i); 
                Console.WriteLine(v.i);//20 
            } 
            public void second(ref Value v, int i) 
            { 
                i = 0;  
                v.i = 20; 
                Value val = new Value(); 
                v = val;
                Console.WriteLine(v.i + " " + i + " ");//15,0 
            } 
        } 
    } 15 0 
    15
      

  5.   

    加了ref或者out是按址传递参数,可以更改原来的变量值不加的话是按值传递参数,值类型传递本身的副本,原来的值不会改变;引用类型传递引用本身的副本,原来的值会改变。
      

  6.   

    其实不要想的太复杂,无论是值类型或者是引用类型的对象,在方法中使用ref和out它们的含义都是一样的。只是对于引用类型,对象的值存在了堆中。至于有没有用,那个关键要看具体的情况。
      

  7.   

    ref 要求变量必须在传递之前进行初始化 out 不需要
      

  8.   

    ref out就是一个弱化了的指针
      

  9.   

    ref必须调用的是变量,out是传出
      

  10.   

    http://www.rczjp.cn/HTML/090419/20090619120659.html
      

  11.   


    out和ref 可以修饰各种类型out修饰的参数,可以用没有被初始化变量传递给函数,但在函数内必须被赋值。
    ref修饰的参数,不可以用没有被初始化的实际参数。但在函数内可以不被赋值
      

  12.   

    什么叫“非基础类型”?什么叫“以引用类型的方式”?C#中所有参数传递都是“按值传递”,不管值类型还是引用类型...只有out或ref关键字才是“按引用传递”,不管值类型还是引用类型...也就是说...“按值传递”还是“按引用传递”跟参数类型没有关系,只跟out或ref关键字有关系...怎么没有意义了?那什么才叫有意义?