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修饰符,且被修饰的参数之后不能有其他参数(这一点就像“可选参数必须在必选参 ...
随机推荐
- Java基础1-1-4—java基础语法(循环+随机数)
4.循环+随机数 4.1 循环语句-for循环 循环 特征:1.重复做某件事情 2.具有明确的开始和停止标志 for循环格式介绍 public static void main(String[] ar ...
- 跟着廖雪峰学python 003
编辑 列表和元组 list 是一种有序.可变的数据类型,可添加删除其中的元素. len()函数:可以获取列表元素的个数 classmates = ['Micheal' , 'Bob' , 'Ja ...
- Kubernetes(k8s)控制器(三):ReplicationController
目录 一.系统环境 二.前言 三.ReplicationController概览 四.ReplicationController工作机制 五.创建ReplicationController 六.扩展r ...
- 亲测有效! Scrutiny 网站SEO检测及优化工具 V12.6.1 for mac
亲测有效! Scrutiny 网站SEO检测及优化工具 V12.6.1 for mac Scrutiny是一款网站SEO工具,它能够自动检测目标网站的坏链.HTML验证.描述Description. ...
- Servlet HTTP Request Response笔记
# 今日内容: 1. Servlet 2. HTTP协议 3. Request## Servlet: 1. 概念 2. 步骤 3. 执行原理 4. 生命周期 ...
- 银河麒麟服务器操作系统安装VMware Tool
安装前提:确保虚拟机连接iso 注:因为我已经安装过VMware Tools,因此此时是显示重新安装 点击重新安装后,会弹出如下对话框,选择"是" 选择"确定" ...
- GIN--HOW POWERFUL GNN
HOW POWERFUL ARE GRAPH NEURAL NETWORKS? 本文是 Jure Leskovec 又一力作,首先对图神经网络的原理做了深入检出.提纲挈领的叙述,然后从原理方面介绍了如 ...
- Vulhub 漏洞学习之:Aria2
Vulhub 漏洞学习之:Aria2 目录 Vulhub 漏洞学习之:Aria2 1 Aria2 任意文件写入漏洞 1.1 漏洞利用 1 Aria2 任意文件写入漏洞 Aria2是一个命令行下轻量级. ...
- CSS3--通过Animation实现简单的手指点击动画
效果图 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <meta ...
- PostgreSQL lag,lead获取记录前后的数据
场景:获取当前行的下一行某一字段数据,获取当前行的上一行某一字段数据 1.测试数据: postgres=# select * from tb1; id | name ----+------ 1 | a ...