C#-out和ref 参数修饰符
参数修饰符:
- 无参数修饰符:如果一个参数没有任何参数修饰符修饰,那么认为它是值传递,意味着方法内部收到的是实参数据的副本
- out:输出参数由方法内部进行赋值,(引用传递),如果方法内部没有给被out修饰的输出参数赋值,就会出现编译报错。out最大的用途就是只调用一次方法便会产生多个返回值。(C#7.0中实现一次方法返回多个返回值,可以使用元组)
- ref:调用者赋初始值,(引用传递),在方法内部可以对参数进行操作,也可以不对它进行操作,但前提是ref修饰的参数是有初始值的。
out 和 ref 区别:
- out修饰的参数必须在方法内部进行操作,而ref随意
- out传参时,如果参数时局部变量,可以不用对其赋值,因为在其方法内部一定存在赋值操作
- ref修饰的变量,其实参必须有初始值,因为方法中不一定对其有赋值操作。
代码验证如下:
static void Main(string[] args)
{
// 1.out 操作
string str_out;
doOut(out str_out);
Console.WriteLine($"执行doOut后的str值为:{str_out}");
Console.WriteLine("----------------");
// 2.ref操作
string str_ref = "ref修饰的参数一定要提前赋值,否则会报错";
doRef(ref str_ref);
Console.WriteLine("----------------");
// 3.无参数修饰符
string str = "无参数修饰符";
Console.WriteLine($"执行无参数修饰符操作之前:{str}");
doWrite(str);
Console.WriteLine($"执行无参数修饰符操作之后:{str}");
Console.WriteLine("----------------");
} /// <summary>
/// out操作
/// </summary>
/// <param name="s"></param>
public static void doOut(out string s)
{
// out 修饰的参数,在方法内部必须进行赋值相关的操作,否则会报错
s = "out修饰的参数需要在方法内部进行了操作,且原始数据也存在改动";
Console.WriteLine(s);
} /// <summary>
/// ref操作
/// </summary>
/// <param name="s"></param>
public static void doRef(ref string s)
{
// ref 修饰的参数,在方法内部可以不对它进行相关的操作,但参数一定要提前赋值
Console.WriteLine(s);
} /// <summary>
/// 无参数修饰符操作
/// </summary>
/// <param name="s"></param>
public static void doWrite(string s)
{
// 无参数修饰符,传入的实参相当于原始数据的一个副本,本质是值传递,并不会对实参本身的数据产生影响
s = "没有任何参数修饰符";
Console.WriteLine(s);
}
操作截图:

C#-out和ref 参数修饰符的更多相关文章
- out 和 ref 参数修饰符
整理自MSDN out: out 关键字通过引用传递参数.这与 ref 关键字相似,只不过 ref 要求在传递之前初始化变量.若要使用 out 参数,方法定义和调用方法均必须显式使用 out 关键字. ...
- .net 参数修饰符
参数修饰符的作用 参数修饰符 作用 无 如果一个参数没有用参数修饰符标记,则认为它将按值传递(pass by value),这意味着被调用的方法收到原始数据的一份副本 out 输出参数由被调用的方法赋 ...
- C#的参数修饰符out,params,ref
using System; namespace ParamsProgram { class TestParams { public static void Main(string[] args)//s ...
- 参数修饰符ref,out ,params的区别
参数修饰符ref,out ,params的区别 C#中有三个关键字-ref,out ,params,可是这三个之间的区别你都明白了吗? 那么我们就来认识一下参数修饰符ref,out ,params吧, ...
- C#中ref和out关键字的应用以及区别(参数修饰符)
ref ref的定义 ref是reference的缩写,通过引用来传递参数的地址,ref基本上是服务于值类型的 ref的使用 //不使用 ref; void Method(int myRefInt) ...
- C#中方法的参数修饰符
做项目久了,有的时候真的需要静下心来认真的总结一下自己所用到的技术,而不是每天依葫芦画瓢,每天忙忙碌碌,到头来不知道自己忙了个啥,学了什么,自己到底掌握了多少知识.所以我想回顾一下C#的基础知识,把重 ...
- Out,ref,params修饰符,可选参数,命名参数
out输出,在调用函数中声明,在被调用函数中赋值: ref在调用函数中赋值,后调用: params修饰符,static double CalculateAverage(params[] values) ...
- c#.net中参数修饰符ref,out ,params解析
params ============================================================================================= ...
- C#原始类型扩展方法—this参数修饰符
扩展方法使您能够向现有类型“添加”方法,而无需创建新的派生类型.重新编译或以其他方式修改原始类型.扩展方法是一种特殊的静态方法,但可以像扩展类型上的实例方法一样进行调用.对于用 C# 和 Visual ...
- c#参数修饰符-params
先来理解一下理论知识 params可以设置使用长度可变的参数. 使用要求: 1.在一个方法声明的参数中,只能有一个params修饰符,且被修饰的参数之后不能有其他参数(这一点就像“可选参数必须在必选参 ...
随机推荐
- 反射概述-获取字节码Class对象的三种方式
反射概述 判定结果∶*红色:失败*绿色:成功*一般我们会使用断言操作来处理结果*Assert.assertEquals(期望的结果,运算的结果);补充∶*Before:*修饰的方法会在测试方法之前被自 ...
- Thread的常用方法_sleep-实现Runable接口
Thread的常用方法_sleep public static void sleep(long millis) :使当前正在执行的线程以指定的毫秒数暂停(暂时停止执行 实现Runable接口 采用 j ...
- 一文讲尽Thread类的源码精髓
摘要:今天,我们就一起来简单看看Thread类的源码. 本文分享自华为云社区<[高并发]Thread类的源码精髓>,作者:冰 河. 前言 最近和一个朋友聊天,他跟我说起了他去XXX公司面试 ...
- 操作系统linux
Linux命令概览 一.哪些地方可以学到Linux? 1.Linux中国 Linux中国绝对是学习Linux的好去处,各种资讯.文章.技术都有,而且更新及时,质量也很高,学Linux一定要去看啊. 2 ...
- 力扣---167. 两数之和 II - 输入有序数组
给你一个下标从 1 开始的整数数组 numbers ,该数组已按 非递减顺序排列 ,请你从数组中找出满足相加之和等于目标数 target 的两个数.如果设这两个数分别是 numbers[index1 ...
- git操作出现 error: The following untracked working tree files would be overwritten by ...
命令行:git clean -d -fx,作用是:删除没有git add 的文件 ,执行之后解决了 error: The following untracked working tree files ...
- 微信小程序组件封装传值以及问题点规避
封装组件 1.在components文件加下新建组件文件夹,在该文件夹下新建组件 2.在app.json中注册该组件 "usingComponents": { "page ...
- vue-cli 更新遇到的问题,卸载不掉旧版本2.9.6(可行)
今天更新vue-cli时,遇到问题:卸载不掉旧版本2.9 官网给的信息是:Vue CLI 的包名称由 vue-cli 改成了 @vue/cli. 如果你已经全局安装了旧版本的 vue-cli (1.x ...
- Linux环境安装Go
1.下载Go发行版 从官方地址:https://golang.org/dl/ 上下载合适的 二进制发行版 (例如: go1.19.6.linux-amd64.tar.gz ): wget https: ...
- LeetCode-1994 好子集的数目
来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/the-number-of-good-subsets 题目描述 给你一个整数数组 nums .如果 ...