public static bool Login(ref UserInfo user)
{}
这个方法中的ref有什么用,他代表什么呢?

解决方案 »

  1.   

    ref是传递参数的地址
    使用ref前必须对变量赋值
      

  2.   

    1.
    public static bool Login(ref UserInfo user)
    {
       user = new UserInfo();
    }
    //原来的user改变2.
    public static bool Login(UserInfo user)
    {
       user = new UserInfo();
    }
    //原user没改变...
      

  3.   

    ref 关键字使参数按引用传递。其效果是,当控制权传递回调用方法时,在方法中对参数所做的任何更改都将反映在该变量中。若要使用 ref 参数,则方法定义和调用方法都必须显式使用 ref 关键字。class RefExample
    {
        static void Method(ref int i)
        {
            i = 44;
        }
        static void Main()
        {
            int val = 0;
            Method(ref val);
            // val is now 44
        }
    }参考:http://msdn.microsoft.com/zh-cn/library/14akc2c7(VS.80).aspx
      

  4.   

    也就是说这个方法中用到的参数来自UserInfo 这个属性是这个意思吗?
      

  5.   

    原来的user改变是指的的什么发生改变呢?
      

  6.   

    对比下:val 就是相应的按指传递参数,也就是传说中的浅拷贝。
      

  7.   


    UserInfo是类名,不是属性。
      

  8.   


    这是不用ref,和用了ref的区别
      

  9.   

    http://hi.csdn.net/space-7877484-do-album-picid-631344.html
    我画了个传参示例图,本来想传上来的,不过这好像不支持直接发,我放我空间里面了
    http://hi.csdn.net/space-7877484-do-album-picid-631344.html希望可以帮到你
      

  10.   

    来一个简单例子
    Static void ShowDouble(int val)
    {
        val *=2;
    }
    int inum = 5;
    ShowDouble(inum );
    Console.WriteLine("inum = {0}", inum);
    结果是5例2
    Static void ShowDouble(ref int val)
    {
        val *=2;
    }
    int inum = 5;
    ShowDouble(ref inum );
    Console.WriteLine("inum = {0}", inum);
    结果是10
      

  11.   

    http://hi.csdn.net/attachment/201009/10/7877484_1284090991yCdZ.png
      

  12.   

    上面是第2种按值类型传递的示例图,我对第1个图稍微做了点修改
    http://hi.csdn.net/space-7877484-do-album-picid-631388.html
      

  13.   

    上面說了好多.
    相信LZ也基本明白了.
    說下我個人理解(菜鳥水平)
    ref 引用傳值
    他的特點就是  一個值可以傳進方法里
    在方法里計算完成后還可以傳出來
    和Out 有點像
    不過Out是必須先賦值才能用.而Ref不用
      

  14.   


    这个问题和什么类型关系不大其实这么理解,调用方法传递的参数,都是复制引用进行传递
    不管这个参数是引用类型 还是值类型用了ref,就是复制引用的引用进行传递了,如果你了解指针,理解会形象一些。
      

  15.   

    我不知道这样理解对不对,来个例子:
    例2
    Static void ShowDouble(ref int val)
    {
      val *=2;
    }
    int inum = 5;
    ShowDouble(ref inum );
    Console.WriteLine("inum = {0}", inum);
    结果是10
    我的理解:先定义int inum = 5;然后把这个值传进ShowDouble()这个方法,也就是ShowDouble(ref inum );
    int inum = 5;在这个方法ShowDouble(ref inum )处理之后返回,然后再WriteLine()出来!这样理解对吗?
      

  16.   

    在C#中摒弃了C和C++中的指针,而需要使用到内存地址的时候,C#就使用了关键字ref和out,相当于实现了C或者C++中指针的操作,具体可以搜索一些相关的资料看看吧。ref在C#调用C或C++的DLL时候用的很多
      

  17.   

    ref是传递参数的地址
    使用ref前必须对变量赋值