首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • 小白请教:C# ref关键字 [已结帖,结帖人:lanytin]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • lanytin
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    • 结帖率:
    发表于:2008-10-30 10:45:20 楼主
    方法参数上的 ref 方法参数关键字使方法引用传递到方法的同一个变量。当控制传递回调用方法时,
    在方法中对参数所做的任何更改都将反映在该变量中。 若要使用 ref 参数,必须将参数作为 ref
    参数显式传递到方法。ref 参数的值被传递到 ref 参数。 传递到 ref 参数的参数必须最先初始化。
    将此方法与 out 参数相比,后者的参数在传递到 out 参数之前不必显式初始化。 属性不是变量,
    不能作为 ref 参数传递。


    大家能讲一下ref关键字吗?用你自己理解的、直白的语言表述,不要像上面官方的语言。
    20  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • xian_yun80
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-10-30 10:55:211楼 得分:5
    假如说,你在一个方法A中调用方法B
    你想给A方法中的变量(或者是其他地方的变量)N通过方法B来获取值
    这时就要用到ref关键字了
    例:
    C# code
    public void A() { int n = ""; B(ref n); //下面就可以用到 n 来作别的操作了 } public void B(ref int n) { n = 1;//获取值过程 }

    不知这样说清楚了没?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • feiyun0112
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-10-30 10:55:492楼 得分:1
    在方法中对参数所做的任何更改都将反映在传入的变量中

    class RefExample
    {
        static void Method(ref int i)
        {
            i = 44;
        }
        static void Main()
        {
            int val = 0;
            Method(ref val);
            // val is now 44
        }
    }

     
    *****************************************************************************
    欢迎使用CSDN论坛专用阅读器 : CSDN Reader(附全部源代码)
    http://feiyun0112.cnblogs.com/
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • wojiushiliumang
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-10-30 10:59:043楼 得分:1
    int n 可以等于 ""  楼上的强人

    out 和 ref  个人在用法上没发现什么区别

    更深层次的没仔细联系过
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • icdbow
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-10-30 11:01:004楼 得分:2
    引用调用参数

    就是说,这个传递的是参数的实际地址,

    当你的参数在方法中改变时,会影响到传进来的变量

    比如说有个TEXT,如果是按值传递方法中做什么事情都和参数无关(参数不受影响)

    但是按引用传递,方法中的参数值变了,TEXT也会跟着改变!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • paulmake
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-10-30 11:01:065楼 得分:1
    引用 3 楼 wojiushiliumang 的回复:
    int n 可以等于 ""  楼上的强人

    out 和 ref  个人在用法上没发现什么区别

    更深层次的没仔细联系过

    ref 的参数使用前必须赋值,out 的参数可以不赋值.其它一样
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • athena_lee
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-10-30 11:07:006楼 得分:1
    ref 方法外对参数先赋值一个初始值,方法中修改该参数的值,并最终将修改后的值传出方法。
    out 方法外仅需要声明,方法中赋值,并传出,我觉得有点象方法的返回值。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • Dobzhansky
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-10-30 11:13:017楼 得分:2
    函数就好像一个黑洞, 参数就是你扔进去一根绳子栓着的肉,
    当你希望能钓上非肉, 或者其他肉, 用 ref 或者 out
    当只是为了送肉进去, 不关心绳子收上来时钩着什么时, 不用加修饰符, 这时绳子收上来时, 会把你当时挂的肉再挂上, 就好像你没往里放一样.

    (一根绳子只能挂一块肉, 肉有类型之分)

    ref out 的都可以在洞里挂东西, 不同的是 out 必须先初始化吧.

    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • Dobzhansky
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-10-30 11:13:578楼 得分:0
    补充:
    内部可以对肉采取行动
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • Dobzhansky
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-10-30 11:14:339楼 得分:0
    out 的肉, 进去后指定被搞一下
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • goga21cn
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-10-30 13:30:3210楼 得分:1
    ref 按引用传递参数,在方法内部对此参数做的更改,将影响到原来的值!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • zhangfeigreat
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-10-30 17:21:1811楼 得分:0
    个人感觉和C++中的引用差不多
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • wackyboy
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-10-30 18:12:1212楼 得分:1
    ref 实参实例化
    out 形参实例化
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • hubofly
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-10-30 18:21:0013楼 得分:1
    ref 就是你传到方法里面的时候,可以不行行任何操作返回;
    out 就是你传到方法里面的时候,必须要进行赋值才能返回。
    简单吧?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • yuwenge
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-10-30 18:28:1914楼 得分:1
    参数引用传递。

    当传递的参数是值类型时,比如int,string,bool值。
    该参数在方法中被修改时,函数外的变量不会变。
    比如

    int a=10;
    test(a);

    public test(int a)
    {
    a++;
    }
    执行完test(a)之后,a的值还是10,而不是11。
    想让执行完后a的值为11那就用ref修饰符

    int a=10;
    test(ref a);

    public test(ref int a )
    {
    a++;
    }
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • wjmo520
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-10-30 19:16:1915楼 得分:1
    我的理解:
            引用调用参数,也就数实参是已经定义好并且有初始的变量,并是用ref修饰。
    然而形参也有ref修饰,并且形参的值改变会影响实参的值~
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • diamondgate
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-10-30 20:18:3716楼 得分:1
    ref就是引用呀 貌似很好理解!
    官方的解释也很清楚
    楼上几位的例子也很详尽了!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • himner
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-10-30 20:45:0517楼 得分:1
    ref out参数结果是一样的。他们都是引用变量的内存地址,可以改变变量的值。不同的是:
    ref必须在方法体外初始化
    out必须在方法体内初始化
    修改 删除 举报 引用 回复

    网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
    北京创新乐知广告有限公司 版权所有 京 ICP 证 070598 号
    世纪乐知(北京)网络技术有限公司 提供技术支持
    Copyright © 2000-2008, CSDN.NET, All Rights Reserved