ref是用来修改引用本身,而不是针对对象

解决方案 »

  1.   

    加上ref表示的是“引用的引用”。
    不加ref,你修改它的属性,会影响到调用者的对象,因为它们是一个对象:
    void Main()
    {
        User u = new User();
        u.id = 1;
        foo(u);
        Console.WriteLine(u.id); // 2
    }
    void foo(User u)
    {
        u.id = 2;
    }
    但是参数指向另一个对象,不会影响原来的对象,比如:
    void Main()
    {
        User u = new User();
        u.id = 1;
        foo(u);
        Console.WriteLine(u.id); // 1
    }
    void foo(User u)
    {
        u = new User();
        u.id = 2;
    }
    加上ref则不同:
    void Main()
    {
        User u = new User();
        u.id = 1;
        foo(ref u);
        Console.WriteLine(u.id); // 2
    }
    void foo(ref User u)
    {
        u = new User();
        u.id = 2;
    }
      

  2.   

    如果是这么基础的问题,我也不会问了
    宝爸说出了本质,只是你没有仔细理解。
    是你们没理解我的题目,斗大的字,你们都没看吗?过年撑到了吗?我问的是有深度的问题,不是问ref的意义,或加不加ref的区别,ref不是重点,问题主要在第一段,第二段是问题及解决方案探讨分析无语了,我的这两段话有这么难理解吗?还是没看题目?
      

  3.   

    我要问的主要是在不用ref的情况下,是否会因为引用类型的参数调用时产生副本而导致内存的“意料之外”的增加,不想造成内存浪费,当然,加了ref之后就是引用参数地址了,也就不产生副本了,关键是一般情况下除非需要修改参数时才使用ref,我这里主要是考虑效率
      

  4.   

    如果是这么基础的问题,我也不会问了
    宝爸说出了本质,只是你没有仔细理解。
    是你们没理解我的题目,斗大的字,你们都没看吗?过年撑到了吗?我问的是有深度的问题,不是问ref的意义,或加不加ref的区别,ref不是重点,问题主要在第一段,第二段是问题及解决方案探讨分析无语了,我的这两段话有这么难理解吗?还是没看题目?

    大过年的,火气别太大,语气别太毒……
      

  5.   

    作为一个war3的老玩家,真为你感到羞耻 
      

  6.   

    我提到war3了吗?就事论事好吗?我为你感到羞耻,如果你真行,证明你是对的
      

  7.   

    基本语法首先搞明白。引用和对于引用修饰ref,都不会产生“副本”。