介绍

给方法传递普通参数时,值类型传递的是拷贝的对象,而引用类型传递的是对象的引用。它们都不能在函数内部直接修改外部变量的引用(不是修改引用类型的属性),而使用 ref 或 out 关键字就可以实现。

作用

ref:在方法内部修改外部变量的引用。

out:方法内部给外部变量初始化,相当于一个函数多个返回值。

注意事项:

  1. 使用 ref 修饰参数时,传入的参数必须先被初始化,方法中可以不复制。而对 out 而言,必须在方法中对其完成初始化,在方法外部不用初始化。
  2. 使用 ref 和 out 时,在执行方法时,参数前都需要加上 ref 或 out 关键字。
  3. out 适合用在需要 return 多个返回值的地方,而 ref 则用在需要被调用的方法修改调用者的引用时。

示例

例 1:交换两个变量的值:

internal class Program
{
    public static void Main(string[] args)
    {
        ;
        ;
        Swap(ref i,ref j);
        Console.WriteLine(i);
        Console.WriteLine(j);
    }

    public static void Swap<T>(ref T obj1, ref T obj2)
    {
        object temp = obj1;
        obj1 = obj2;
        obj2 = (T) temp;
    }
}

例 2:自己实现 int.TryParse() 方法:

internal class Program
{
    public static void Main(string[] args)
    {
        string numStr1 = "abc";
        ";
        int result1;
        int result2;
        TryParse(numStr1, out result1);
        TryParse(numStr2, out result2);
        Console.WriteLine(result1); // -1
        Console.WriteLine(result2);
    }

    /**
     * 将字符串转换成一个 int 类型,以 out 参数 result 返回,如果出现异常,result 值为 -1
     */
    public static void TryParse(string numStr, out int result)
    {
        try
        {
            var num = Convert.ToInt32(numStr);
            result = num;
        }
        catch (Exception e)
        {
            result = -;
        }
    }
}

最新文章

  1. Linux初识
  2. docker常用命令
  3. 【翻译自nikic大神】PHP中原生类型的方法
  4. D3.js 更自由的条形图
  5. Unity3D和OGRE资源管理机制
  6. UESTC 1237 质因子分解
  7. SQL-Server 创建数据库,创建表格
  8. WebApp远程调试工具
  9. Qt窗体关闭时,如何自动销毁窗体类对象
  10. hdu 4643(计算几何)
  11. __attribute__ ((section(&quot;.text&quot;)))的测试
  12. JavaScript_数组
  13. 几个常用道的macro
  14. VS2010程序打包操作
  15. Android - 直线(line)画法
  16. 浅谈游戏中BOSS设计的思路
  17. Ubuntu16.04安装和配置RabbitMQ
  18. Swift学习笔记(十四)——字符,常量字符串与变量字符串
  19. Java第05次实验提纲(Java图形界面编程)
  20. 20155338课程设计个人报告——基于ARM实验箱的Android交友软件的设计与实现

热门文章

  1. git remote: HTTP Basic: Access denied Mac 使用Sourcetree 密码输错 再次输入解决方案
  2. from表单校验插件 validate 实例
  3. element el-tree 添加图标
  4. kettle使用文件导入到Postgresql出现如下几种问题的总结
  5. windows下创建MySQL定时备份与删除脚本
  6. 第八篇 Flask配置
  7. Python的numpy库中rand(),randn(),randint(),random_integers()的使用
  8. pytorch简介
  9. Java_String
  10. Django中Q搜索的简单应用