介绍

给方法传递普通参数时,值类型传递的是拷贝的对象,而引用类型传递的是对象的引用。它们都不能在函数内部直接修改外部变量的引用(不是修改引用类型的属性),而使用 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 = -;
        }
    }
}

C#基础加强(7)之ref与out的更多相关文章

  1. Vue(基础五)_vue中用ref和给dom添加事件的特殊情况

    一.前言 这篇文章涉及的主要内容有: 1.ref绑定在标签上是获取DOM对象 2.ref绑定在子组件上获取的是子组件对象 3.案列:自动获取input焦点 二.主要内容 1.基础内容: ref 被用来 ...

  2. 全面了解Vue3的 ref 和相关函数和计算属性

    基础类型的响应性 -- ref 在vue3里面,我们可以通过 reactive 来实现引用类型的响应性,那么基础类型的响应性如何来实现呢? 可能你会想到这样来实现: const count = rea ...

  3. Swagger结合mustache模板生成后台接口代码、以及前后台建模代码

    之前项目中使用的的thrift来建模,维护前后台模型以及rest接口,前台使用的是angular2: 但是使用thrift只能生成建模,后台的rest接口的Controller文件还是需要手动去写,一 ...

  4. [RN] 02 - Overview: React Native Practice of 50 lectures

    观看笔记:零基础 React Native 实战开发视频 50讲 本篇效果:RN入门,整体认识 基本原理 # 1 React到RN # 2 一个简单的例子 /** * Sample React Nat ...

  5. dubbo项目实战代码展示

    最近公司项目使用dubbo服务,于是就去网上搜索关于dubbo的相关资料,真的很多,但是对于很多人并不是很了解框架或者 不是太适合新手的片段代码,于是我就根据项目的相关内容把dubbo部分单独切出来, ...

  6. [Code] 大蛇之数据工程

    作为“所谓码农”的首篇,本章内容理应涵盖基本编程技法. Python这个东西.简洁,作为载体,是个不错的选择呦. 链接资源: Python文档:https://docs.python.org/3/ 教 ...

  7. Coposition 详解

    LifeCycle Hooks 在新版的生命周期函数,可以按需导入到组件中,且只能在setup()函数中使用. import { onMounted, onUnmounted } from 'vue' ...

  8. C#基础知识系列一(goto、i++、三元运算符、ref和out、String和string、重载运算符)

    前言 这两天在网上看到的总结很多,尤其是博客园中的,很多很多,也给了我很多的启发,当然自己也总结过,而且有很多人也给与我一些意见和看法.不管怎样,自己还是先把所谓的基础知识加强巩固下吧. 2014年的 ...

  9. [C#基础]ref和out的区别

    在C#中通过使用方法来获取返回值时,通常只能得到一个返回值.因此,当一个方法需要返回多个值的时候,就需要用到ref和out,那么这两个方法区别在哪儿呢? MSDN:       ref 关键字使参数按 ...

随机推荐

  1. fire workflow总结

    一.Fire WorkFlow核心1.IPersistenceService存储服务.Fire Workflow 缺省情况下使用hibernate 进行数据库存取.如果你的系统不是使用hibernat ...

  2. Leetcode | 组目录

    数组 [1]999. 车的可用捕获量 [2]989. 数组形式的整数加法

  3. 利用BootStrap Table插件实现自己的弹出框分页。

    参考链接1:    官网:http://bootstrap-table.wenzhixin.net.cn/zh-cn/home/        开始使用:http://bootstrap-table. ...

  4. Softmax 回归 vs. k 个二元分类器

    如果你在开发一个音乐分类的应用,需要对k种类型的音乐进行识别,那么是选择使用 softmax 分类器呢,还是使用 logistic 回归算法建立 k 个独立的二元分类器呢? 这一选择取决于你的类别之间 ...

  5. [CF662C] Binary Table(FWT)

    题意: https://www.cnblogs.com/cjyyb/p/9065801.html 题解:

  6. 我的第二本译作《精通OpenStack》上架啦:书籍介绍和译者序

    1. 书籍简介 英文书名:Mastering OpenStack Second Edition 作者:[德] 奥马尔-海德希尔(Omar Khedher)[印] 坚登-杜塔-乔杜里(Chanda Du ...

  7. 提升webpack打包速度

    webpack打包文件体积过大,怎么提升速度? 借助webpack visualizer可视化插件,来看构建的情况.这个问题要具体情况具体分析,看看打包文件有哪些块头比较大,哪些不常改变,最好列一个l ...

  8. C#中new的三种用法

    在 C# 中,new 关键字可用作运算符.修饰符或约束. 1)new 运算符:用于创建对象和调用构造函数. 2)new 修饰符:在用作修饰符时,new 关键字可以显式隐藏从基类继承的成员. 3)new ...

  9. [PA2014]Parking

    [PA2014]Parking 题目大意: 停车场是一个宽度为\(w(w\le10^9)\)的矩形.我们以其左下角顶点为原点,坐标轴平行于矩形的边,建立直角坐标系.停车场很长,我们可以认为它一直向右边 ...

  10. JavaScript定义函数

    函数声明 一个函数定义(也称为函数声明,或函数语句)由一系列的function关键字组成,依次为: 1函数的名称. 2函数参数列表,包围在括号中并由逗号分隔. 3定义函数的 JavaScript 语句 ...