C# ref / out 用法

news2024/10/5 12:03:06

目录

一、简介

二、ref 关键字

案例

注意点1

注意点2

三、out 关键字

案例

注意点1

注意点2

四、ref 和 out 关键字的相同点

五、ref 和 out 关键字的不同点

结束


一、简介

在C#中,ref和out关键字用于参数传递的方式。它们允许在方法内部对参数进行修改,并将修改后的值带回到调用方法中。 ref关键字用于传递引用类型的参数。当使用ref关键字传递参数时,方法内部对参数的任何修改都会影响到调用方法中的原始变量。 out 关键字主要用于传递值类型的参数,并且要求在方法内部对参数进行赋值。与ref不同,使用out关键字传递参数时,不需要在调用方法之前对参数进行初始化。

二、ref 关键字

案例

namespace RefAndOut
{
    internal class Program
    {
        static void Main(string[] args)
        {
            int number = 5;
            UpdateValue(ref number);
            Console.WriteLine(number);

            Console.ReadKey();
        }

        static void UpdateValue(ref int value)
        {
            value = 10;
        }
    }
}

运行:

注意点1

ref 传递的变量一定要初始化,否则会报错

 

 

注意点2

ref 参数在方法内不赋值,也不会有任何影响

namespace RefAndOut
{
    internal class Program
    {
        static void Main(string[] args)
        {
            int number = 5;
            string name = "test";
            UpdateValue(ref number, ref name);
            Console.WriteLine(number);
            Console.WriteLine(name);

            Console.ReadKey();
        }

        static void UpdateValue(ref int value, ref string name)
        {
            //value = 10;
            //name = "tt";
        }
    }
}

运行:

 

三、out 关键字

案例

namespace RefAndOut
{
    internal class Program
    {
        static void Main(string[] args)
        {
            int age;
            string name;
            Test(out age, out name);
            Console.WriteLine("age:{0}, name:{1}", age, name);

            Console.ReadKey();
        }

        static void Test(out int age, out string name)
        {
            age = 16;
            name = "张三";
        }
    }
}

运行:

 

注意点1

out 关键字,必须在方法体内部赋值,否则会报错

 

注意点2

使用 out 参数,执行的变量可以不进行初始化

 

 

四、ref 和 out 关键字的相同点

1. 都是通过函数参数传递的方式:

ref 和 out 都是用于按引用传递参数,可以在方法内部修改传递的参数的值。

2.都可以在调用方法之前进行初始化

ref 和 out  都可以在调用方法之前进行初始化,调用方法后,参数的实际值以方法内部的赋值为准。

五、ref 和 out 关键字的不同点

1. 参数的初始化:

使用 ref 关键字传递参数时,参数在调用函数之前必须被初始化(赋值),而使用 out 关键字传递参数时,参数可以在调用的函数内部进行初始化。

2. 方法内部的赋值:

使用 ref 关键字传递参数时,函数内部可以不进行赋值,而使用 out 关键字传递参数时,函数内部必须进行赋值

结束

如果这个帖子对你有所帮助,欢迎 关注 + 点赞 + 留言,谢谢!

end

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/698901.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【无标题】宋词节选与中英对照

(https://img-blog.csdnimg.cn/03a0e9fdc924401fa7ab82d42a5b8dcc.jpg)

【剑指offer刷题记录 java版】链表双指针

本系列文章记录labuladong的算法小抄中剑指offer题目 【剑指offer刷题记录 java版】链表双指针 剑指 Offer II 025. 链表中的两数相加剑指 Offer 25. 合并两个排序的链表剑指 Offer 52. 两个链表的第⼀个公共节点剑指 Offer II 021. 删除链表的倒数第 n 个结点剑指 Offer II 02…

qt event事件处理

qt事件处理 qt事件处理比较恶心,各个事件都是独立的。如果同一时间出现多个事件,某些事件在qt中接收不到。 可以参考qtbase源码事件处理部分,所有的事件都在switch…case中处理,所以一次循环只会处理一个事件。 主窗口中可以通过…

【Rust 基础篇】Rust引用详解

文章目录 引言一、什么是引用?二、不可变引用三、可变引用四、引用的规则五、引用的使用建议六、示例代码总结 引言 在Rust中,引用是一种轻量级的指向数据的方式,它允许我们在不获取所有权的情况下访问和操作数据。引用是Rust中处理借用操作…

PostgreSql 逻辑结构

Database Cluser: 数据库集簇,一套服务器上安装部署完成的一套PostgreSql。在其中可创建数据库(Database)、用户(User)。User: 数据库用户,用来连接访问数据库,可通过权限管理,控制其…

360手机刷机 360手机Magisk面具安装与使用教程

360手机刷机 360手机Magisk面具安装与使用教程 参考:360手机-360刷机360刷机包twrp、root 360刷机包360手机刷机:360rom.github.io 【前序】 360手机通过Twrp,即可刷写Magisk文件;刷写成功后,即可获得root权限&#…

idm下载器怎么样好用吗?最新版本有哪些优势

日常工作中下载资料、音/视频等文件是常见的操作,如今市面上的软件非常多,根据我个人的使用经验idm非常不错。idm下载软件怎么样?idm下载软件不仅可下载的文件类型多,而且idm下载文件的速度非常快,同样下载文件的方法也…

电子证件照怎么弄?学会这几招在家也能做证件照

在很多情况下,人们需要制作证件照来证明自己的身份。例如,如果你想办理身份证、护照、驾驶证等证件,或者报考各类考试或申请学校、公司等机构,或者办理银行卡、社保卡等业务,或者申请签证或出入境手续,或者…

基于Java+Swing+Mysql商品信息管理系统

基于JavaSwingMysql商品信息管理系统 一、系统介绍二、功能展示1.主页2.新增商品信息3.查询商品信息 三、数据库四、其他系统实现五、获取源码 一、系统介绍 该系统实现了查看商品列表、新增商品信息、查询商品信息 运行环境:eclipse、idea、jdk1.8 二、功能展示…

IOC-DI(分层解耦)

问题-引出 可以发现我们之前的代码但是写在我们的controller程序中 这里因为比较简单 但是如果我们开发一个比较复杂的功能的话-会出现大量操作数据的代码 导致代码的复用性较差 且难以维护 分层解耦 三层架构 按照上面的对应代码不同功能 来分为下面这三个架构 对应的contr…

Elasticsearch:跨集群复制应用场景及实操 - Cross Cluster Replication

通过跨集群复制(Cross Cluster Replication - CCR),你可以跨集群将索引复制并实现: 在数据中心中断时继续处理搜索请求防止搜索量影响索引吞吐量通过在距用户较近的地理位置处理搜索请求来减少搜索延迟 跨集群复制采用主动 - 被…

电商神器!教你如何利用数据分析打造销售奇迹!

能解决80%通用需求,提供销售、财务、广告、库存等电商数据分析主题的奥威BI电商数据分析方案一直都是比较神秘的存在。有说它风险低的,也有说它性价比高、效率高、可塑性高(支持个性化开发),但说到底,这份B…

企业机房如何管理电池?分享一个实操方法

在现代的信息化社会中,机房扮演着至关重要的角色,是许多组织和企业的核心基础设施。而机房的稳定供电则离不开可靠的电池系统作为备用电源。 电池的状态监控和管理一直是机房管理者面临的挑战。为了确保机房的可靠运行和及时发现电池问题,动环…

二、部署Git服务器-Windows环境部署Gitea

目录 1. 说明2. 环境准备3. 安装部署3.1 安装Git3.2 安装Gitea3.3 将 Gitea 注册为 Windows 服务(可选)3.4 启用 Gitea 内置的 SSH 服务器(可选)3.5 编辑 Windows 防火墙 Gitea是一个自托管的Git服务,类似于GitHub、Gi…

设计模式学习之策略模式和简单工厂模式的对比

设计模式系列往期文章 设计模式学习之策略模式设计模式学习之策略模式在前端的应用设计模式学习之简单工厂模式设计模式学习之工厂方法模式设计模式学习之抽象工厂模式 在这之前我们已经介绍过了策略模式和简单工厂模式,也清楚策略模式属于行为模式,简…

mysql字符集小总结

1.先看部分字符集 show variables like ‘character%’; 解释一下: character_set_client //客户端字符集 character_set_connection //连接字符集 character_set_database //mysql数据库字符集 character_set_filesystem //文件系统字符集 character_set_res…

普通相机标定——OpenCV函数讲解(上)

计算流程 我们使用OpenCV进行标定算法的开发,这里使用的是OpenCV3.4.6版本。使用OpenCV标定相机的算法流程如下。 Step1.检测之前采集的多张图像中的棋盘格角点像素坐标 Step2.利用棋盘格角点的像素坐标、世界坐标,计算相机的内参、畸变系数 Step3.利用相机的内参…

微信小程序web-view嵌入uni-app H5页面,通过H5页面跳转企业微信客户聊天窗口如何操作?

1、先找到企业ID和企业微信聊天接入链接 1)找到企业ID,登录 企业微信 https://work.weixin.qq.com/https://work.weixin.qq.com/ 2)找到接入链接 2、开始写H5页面代码 let d {corpId: ww931你挚爱的强哥8dee,//企业微信IDurl: https://…

[Visual Studio]Ctrl + T 跳转没有预览下拉选项的问题

最近一段时间,在用VS的CtrlT的跳转时,发现看不到下面的预览选项了。各种方式尝试无效。 最后发现原来下面的紫色区域,将鼠标悬停上去,是可以下拉的…

JavaScript(JS基础)

提示:JS的重点是让静态的页面产生一些变化 文章目录 JS编写方式嵌入编写外部编写 JS基本语法使用let声明变量使用var声明变量 JS中的数据类型JS中运算符❗ 和 JS中的数据类型转换字符串类型加减乘除布尔类型加减乘除 字符串与整数、小数之间的转换 JS流程控制语句 J…