C#中方法的参数四种类型(值参数、ref、out、params)详解

C#中out、ref、params参数的使用 转载请注明出处:http://blog.youkuaiyun.com/hongjiapeng/article/details/78088302 1、out参数。 如果你在一个方法中,返回多个相同类型的值的时候,可以考虑返回一个数组。但是,如果返回多个不同类型的值的时候,返回数组就不行了,那么这个时候,我们可以考虑使用out参数。out参数就侧重于在一个方法中可以返回多个不同类型的值。 不使用ou... 阅读详情

看公司程序偶然看到ref引用,于是查找一了番,现整理如下:

    1. 值参数 (不加任何修饰符,是默认的类型)
      2. 引用型参数 (以ref 修饰符声明)
      3. 输出参数 (以out 修饰符声明)
      4. 数组型参数 (以params 修饰符声明)

1. 值类型:
    值类型是方法默认的参数类型,采用的是值拷贝的方式。也就是说,如果使用的是值类型,则可以在方法中更改该值,但当控制传递回调用过程时,不会保留更改的值。
    使用值类型的例子如:(下面的Swap()未能实现交换的功能,因为控制传递回调用方时不保留更改的值)

  1. using System; 
  2. class Test{     
  3. static void Swap(int x, int y)     
  4. {         
  5. int temp = x;         
  6. x = y;         
  7. y = temp;     
  8. }     
  9. static void Main()     
  10. {         
  11. int i = 1, j = 2;        
  12. Swap(i, j);        
  13. Console.WriteLine("i = {0}, j = {1}", i, j);     
  14. } 
  15. }/* * 输出结果为: i=1, j=2 * 未能实现Swap()计划的功能 */ 

2. 引用类型(ref类型)

  ref 关键字使参数按引用传递。其效果是,当控制权传递回调用方法时,在方法中对参数所做的任何更改都将反映在该变量中。

  2.1. 若要使用 ref 参数,则方法定义和调用方法都必须显式使用 ref 关键字。
  2.2. 传递到 ref 参数的参数必须最先初始化。这与 out 不同,out 的参数在传递之前不需要显式初始化。
2.3. 如果一个方法采用 ref 或 out 参数,而另一个方法不采用这两类参数,则可以进行重载。

相关实例如下: 

  1. using System; 
  2. class Test{     
  3. static void Swap(ref int x, ref int y)     
  4. {         
  5. int temp = x;         
  6. x = y;        
  7. y = temp;     
  8. }    
  9. static void Main()     
  10. {        
  11. int i = 1, j = 2;         
  12. Swap(ref i, ref j);         
  13. Console.WriteLine("i = {0}, j = {1}", i, j);   
  14. } 
  15. }/* * 引用类型实现了Swap()计划的功能: * 输出为: * i = 2, j =1 */ 

3. 输出类型(out类型)
  out 关键字会导致参数通过引用来传递。这与 ref 关键字类似。
    与 ref 的不同之处:
      3.1. ref 要求变量必须在传递之前进行初始化,out 参数传递的变量不需要在传递之前进行初始化。

3.2. 尽管作为 out 参数传递的变量不需要在传递之前进行初始化,但需要在调用方法初始化以便在方法返回之前赋值。

示例如下: 

  1. using System; 
  2. class Test 
  3. {     
  4. static void Swap(out int x, out int y)     
  5. {        //在这里进行了i和j的初始化         
  6. x = 1;        y = 2;         
  7. int temp = x;        
  8. x = y;         
  9. y = temp;     
  10. }     
  11. static void Main()     
  12. {        //此处可以不进行i和j的初始化         
  13. int i , j ;        
  14. Swap(out i, out j);         
  15. Console.WriteLine("i = {0}, j = {1}", i, j);     
  16. } 
  17. }/* * 输出类型也实现了Swap()计划的功能: * 输出为: * i = 2, j =1 */ 

4. 数组型参数类型(params类型)

  params 关键字可以指定在参数数目可变处采用参数的方法参数。也就是说。使用params可以自动把你传入的值按照规则转换为一个新建的数组。

      4.1. 在方法声明中的 params 关键字之后不允许任何其他参数,并且在方法声明中只允许一个 params 关键字。

    示例如下:

    1. using System; 
    2. class App 
    3. {     
    4. public static void UseParams(params object list)     
    5. {         
    6. for (int i = 0; i < list.Length; i++)         
    7. {             
    8. Console.WriteLine(list[i]);        
    9. }     
    10. }     
    11. static void Main()     
    12. {        
    13. // 一般做法是先构造一个对象数组,然后将此数组作为方法的参数         
    14. object arr = new object  
    15. { 100, 'a', "keywords" };         
    16. UseParams(arr);        // 而使用了params修饰方法参数后,我们可以直接使用一组对象作为参数        // 当然这组参数需要符合调用的方法对参数的要求        
    17. UseParams(100, 'a', "keywords");        Console.Read();    
    18. } 
    19. } 

本文转载自:http://www.hello-code.com

C# 函数 参数与返回值 out、ref、params 若我们在Main()函数中,调用Test()函数,我们管Main()函数叫 调用者,管Test()函数叫 被调用者。 如果 被调用者 想要得到 调用者 的值: 传递参数。 定义全局变量,使用静态字段来模拟全局变量。public static int num = 2; 如果 调用者 想要得到 被调用者 的值: 返回值 文章目录1、out参数2、ref参数3、params可变参数 1、out参数 如果你在一个方法中,返回多个相同类型的值的时候,可以考虑返回一个数组。但是,如果返回多个不同.. 阅读详情

相关推荐

从ORCAP-1589警告看Cadence ORCAD的DRC设置:如何避免‘网络别名’引发的潜在短路风险

本文深入解析Cadence ORCAD中ORCAP-1589警告的深层含义,探讨网络别名可能引发的短路风险及DRC设置优化方案。通过分析网络别名的设计意图、DRC规则配置及最佳实践,帮助工程师有效规避设计风险,提升电路设计的可靠性和规范性。

weixin_34194829的博客 297

C#中的ref out param关键字

<br />ref是传递参数的地址,out是返回值,两者有一定的相同之处,不过也有不同点。使用ref前必须对变量赋值,out不用。<br />ref 关键字使参数按引用传递。其效果是,当控制权传递回调用方法时,在方法中对参数所做的任何更改都将反映在该变量中。若要使用 ref 参数,则方法定义和调用方法都必须显式使用 ref 关键字。<br />传递到 ref 参数的参数必须最先初始化。这与 out 不同,out 的参数在传递之前不需要显式初始化。<br />尽管 ref 和 out 在运行时的处理方式不同,

zhanxiangma的专栏 1378

目标检测技术的发展:从R-CNN、YOLO到DETR、DINO

OV-DINO的出现标志着在开放域目标检测领域的重大进步,其在处理未见过的物体类别时的能力得到了显著提升。这项技术对于需要适应未知或变化环境的应用具有重要意义,如自动驾驶、机器人视觉、安防监控等。

DeepAIedu的博客 2631

c# 方法参数(传值,传引用,ref,out,params,可选参数,命名参数)

一、方法参数的类型----值类型和引用类型        当方法传递的参数是值类型时,变量的栈数据会完整地复制到目标参数中即实参和形参中的数据相同但存放在内存的不同位置。所以,在目标方法中对形参所做的更改不会对调用者的初始变量产生任何影响。       当方法传递的参数是引用

susan19890313的专栏 4万+

Vectorless dynamic动态功耗分析——Voltus

power 计算工具会根据设计信息和用户提供的activity和switching约束来生成虚拟的worst-case的power vector,难点在于哪些instances视为switching,在没有仿真的前提下如何确定开关的时间,使用timing文件(TWF)

qq_44347276的博客 2790

CentOS 环境 sngrep 安装及使用

在呼叫中心类应用开发过程中,经常需要对 SIP 信令抓包,分析排查问题。通常抓包的工具非常多样,如 Wireshark、tcpdump、ngrep 等都是可选项,但是针对 SIP 信令的抓包,sngrep 则更为好用。因为 sngrep 不仅提供了图形界面,还会将一通会话的 SIP 信令关联汇总,非常直观执行以下命令下载 的相关依赖库 1.2 添加 sngrep 的源并导入 执行下面的命令新增一个源仓库配置文件 然后在该文件中写入以下配置内容 执行命令导入源仓库的公钥 1.3 安装 sngrep

谈谈1974 8148

C#中“ref“关键字详解及案例

C#中“ref“关键字详解及案例

qqrrjj2011的博客 9893

跟着Synopsys报告,一步步拆解车规芯片FMEDA计算(含公式与避坑点)

本文详细解析了车规芯片FMEDA计算的全流程,基于Synopsys报告拆解实战指南,涵盖基础失效率建模、安全机制效能评估及安全指标合成等关键步骤。通过公式解析、数据准备清单和避坑点分享,帮助工程师掌握ISO26262标准下的硬件量化分析技术,提升车载系统设计可靠性。

weixin_30460489的博客 195

C#——ref

C#——ref关键字 ref 关键字指示按引用传递的值。 它用在四种不同的上下文中: 1.在方法签名和方法调用中,按引用将参数传递给方法。 2.在方法签名中,按引用将值返回给调用方。 3.在成员正文中,指示引用返回值是否作为调用方欲修改的引用被存储在本地,或在一般情况下,局部变量按引用访问另一个值。 4.在 struct 声明中声明 ref struct 或 readonly ref struct。 按引用传递参数 在方法的参数列表中使用 ref 关键字时,它指示参数按引用传递,而非按值传递。 ref 关

weixin_43945471的博客 3万+

深入解读WT软件湍流强度计算与分析

深入解读WT软件湍流强度计算与分析

weixin_46713695的博客 1021

第十五章数据管理成熟度评估【6’】(DAMA-CDGA 2022年以后历年模拟题真题汇总,基本包含所有考点。)

第十五章数据管理成熟度评估【6’】(DAMA-CDGA 2022年以后历年模拟题真题汇总,基本包含所有考点。)

JasonH2021的博客 405

C# 方法的参数主要有四种类型:值参数、引用参数ref 、输出参数out、可变参数params

• 值参数:适用于不需要修改原始数据的简单场景。 • 引用参数 (ref):适用于需要修改原始数据的场景,注意初始化。 • 输出参数 (out):适用于方法需要返回多个值的场景,或者需要确保方法内部一定会为参数赋值的场景。 • 可变参数 (params):适用于参数数量可变的场景,简化方法调用。

仰望星空的人 1703

【DRAM存储器十五】DDR介绍-关键技术之DLL和prefetch

详述DDR DLL和预取原理以及几个DDR相对初代SDRAM新增的时序参数

highman110的博客 4366

C#方法的参数类型

也可以将整个方法调用作为一个实参传给其他方法,比如直接进行打印:

2402_83809362的博客 897

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

C#中方法参数的四种类型_C#教程

C#中方法的参数有四种类型:-值参数:不含任何修饰符。方法中的形参是实参的一份拷贝,形参的改变不会影响到内存中实参的的值,实参是安全的。-引用参数:以ref修饰符声明。传递的参数实际上是实参的指针,所以在方法中的操作都是直接对实参进行的,而不是复制一个值;可以利用这个方式在方法调用时双向传递参数;为了以ref方式使用参数,必须在方法声明和方法调用中都明确地指定ref关键字,并且实参变量在传

生活 技术 娱乐 858

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

C#中方法参数的四种类型

C#中方法参数的四种类型 C#中方法的参数有四种类型: -值参数:不含任何修饰符。方法中的形参是实参的一份拷贝,形参的改变不会影响到内存中实参的的值,实参是安全的。 -引用参数:以ref修饰符声明。传递的参数实际上是实参的指针,所以在方法中的操作都是直接对实参进行的,而不是复制一个值;可以利用这个方式在方法调用时双向传递参数;为了以ref方式使用参数,必须在方法声明和方法调用中都明确地指定ref关键字,并且实参变量在传递给方法前必须进行初始化。 -输出参数:以out修饰符声明。和ref类似,它也是直接对实参

jiahui513的博客 2400

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

黑马程序员——ref 和 out 传参的用法实例

buffering^^^^^^

u013448142的专栏 635

C# 常用参数

主函数调用 1 public static void Fun_Param() 2 { 3 int x = 1; 4 int y = 5; 5 ChangeValue(x, y); 6 //外部调用Ref函数,必须初始化变量 7 ...

weixin_30247781的博客 129

ref 和 out 的用法和区别以及params用法

方法参数可以划分为一下四种类型1值参数:声明时不含任何修饰符2引用参数:以ref修饰符声明3输出参数:以out修饰符声明4参数数组:以params修饰符声明引用参数和输出参数不创建新的存储位置。简单的说引用参数既能将值带进方法,也能将值带出方法——有进有出(ref)输出参数不能将值带进方法,只能将值带出方法——只出不进(out) 可参考:msdn out ref pa...

weixin_30780649的博客 184

C#中方法的参数有四种类型

C#中方法的参数有四种类型:-值参数:不含任何修饰符。方法中的形参是实参的一份拷贝,形参的改变不会影响到内存中实参的的值,实参是安全的。-引用参数:以ref修饰符声明。传递的参数实际上是实参的指针,所以在方法中的操作都是直接对实参进行的,而不是复制一个值;可以利用这个方式在方法调用时双向传递参数;为了以ref方式使用参数,必须在方法声明和方法调用中都明确地指定ref关键字,并且实参变量在传...

weixin_34151004的博客 503

c# Method Parameters

In C#, you have four types of method parameters: value, ref, out, and params. 1. The default parameter type is value. 2.If you want calling code to see changes to a value type variable, the paramet...

weixin_34417200的博客 152

C#4.0权威指南第8章:方法

本文详细介绍了C#中方法的各个方面。首先阐述了方法的构成,包括方法签名(访问修饰符、返回值类型、名称、参数信息)和方法体(局部变量、语句结构等)。然后讲解了局部变量和常量的作用域规则,以及方法的调用过程。重点分析了四种参数类型:值参数(默认)、引用参数(ref)、输出参数(out)和参数数组(params),并通过堆栈示意图展示了不同参数类型的内存分配机制。此外还介绍了方法递归、重载决策机制和静态方法的特性,其中静态方法只能访问静态成员且不能使用this关键字。通过丰富的代码示例和内存状态图,全面解析了方法

欢迎来到我的博客。 1506

C#方法中的参数

C#方法中的参数有4种类型: 1 传值 不含任何修饰符     2 传址 以ref修饰符声明 在方法的参数和执行方法时,都要加Ref关键字。适用于需要被调用的方法修改调用者的引用的时候 传入的参数必须先在函数体外初始化,对变量赋值(有进有出) 3 输出参数 以out修饰符声明 在方法的参数和执行方法时,都要加Out关键字。适合用在需要re

375
上一篇: 事务嵌套,你懂多少
普通网友
博客等级 码龄14年 0粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值