专栏首页跟着阿笨一起玩NETC# 中的 Out 和 Ref 及Params 参数

C# 中的 Out 和 Ref 及Params 参数

out 和ref 参数 经常用来通过方法传递参数来获取值,当您的方法不只有一个返回值的时候,这两个参数就发挥作用了。ref是传递参数的地址,out是返回值,两者有一定的相同之处,不过也有不同点。 
在这篇文章里,我将解释如何在c#应用中使用这两个参数。
 
1、out 参数
 
out 方法参数关键字使方法引用传递到方法的同一个变量。当控制传递回调用方法时,在方法中对参数所做的任何更改都将反映在该变量中。
 
public class mathClass
{
public static int TestOut(out int iVal1, out int iVal2)
{
    iVal1 = 10;
    iVal2 = 20;
    return 0;
} 
public static void Main()
{
    int i, j; // variable need not be initialized 
    Console.WriteLine(TestOut(out i, out j));
    Console.WriteLine(i);
    Console.WriteLine(j);
}
}
 
2、ref 参数
 
ref 方法参数关键字使方法引用传递到方法的同一个变量。当控制传递回调用方法时,在方法中对参数所做的任何更改都将反映在该变量中。 
static void Main(string[] args)
{
// Ref sample 
   int refi; // variable need be initialized 
   refi = 3; 
   RefTest(ref refi); 
   Console.WriteLine(refi); 
   Console.ReadKey(); 
} 
public static void RefTest(ref int iVal1) 
{ 
   iVal1 += 2; 
}
 
 ref和out参数的区别
  
使用ref前必须对变量赋值,out不用。 
out的函数会清空变量,即使变量已经赋值也不行,退出函数时所有out引用的变量都要赋值,ref引用的可以修改,也可以不修改。
 
(3)params 参数
params 关键字可以指定在参数数目可变处采用参数的方法参数。
在方法声明中的 params 关键字之后不允许任何其他参数,并且在方法声明中只允许一个 params 关键字。
using System;
class App
{
    public static void UseParams(params object[] list)
    {
        for (int i = 0; i < list.Length; i++)
        {
            Console.WriteLine(list[i]);
        }
    }
    static void Main()
    {
        // 一般做法是先构造一个对象数组,然后将此数组作为方法的参数
        object[] arr = new object[3] { 100, 'a', "keywords" };
        UseParams(arr);
        // 而使用了params修饰方法参数后,我们可以直接使用一组对象作为参数
        // 当然这组参数需要符合调用的方法对参数的要求
        UseParams(100, 'a', "keywords");
        Console.Read();
    }

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • C#修饰符

    C#中类及类型成员权限访问修饰符有以下四类:public,private,protected,internal。

    跟着阿笨一起玩NET
  • 基于ASP.NET WebAPI OWIN实现Self-Host项目实战

    跟着阿笨一起玩NET
  • Assembly.Load()方法,Assembly.LoadFrom()方法,Assembly.LoadFile()方法的区别!

             这个方法通过程序集的长名称(包括程序集名,版本信息,语言文化,公钥标记)来加载程序集的,会加载此程序集引用的其他程序集,一般情况下都应该优先...

    跟着阿笨一起玩NET
  • 1.2 折线图与柱形图

    在可视化的选项里面有很多图表类型可供选择,常用的有折线图、柱形图、折线与柱形组合、气泡图、地图、树状图、瀑布图、饼图、仪表等等,我想在开始学习做图之前提醒读者的...

    公众号PowerBI大师
  • 《Effective Java》——读后总结

    这本书在Java开发的行业里,颇有名气。今天总算是粗略的看完了...后面线程部分和序列化部分由于心浮气躁看的不仔细。这个月还剩下一周,慢慢总结消化。

    Java后端工程师
  • 组合泛化能力太差?用深度学习融合组合求解器试试

    目前,在计算机这个学科中有两个非常重要方向:一个是离散优化的经典算法-图算法,例如SAT求解器、整数规划求解器;另一个是近几年崛起的深度学习,它使得数据驱动的特...

    AI科技评论
  • 深入剖析mybatis原理(二)

    我们接下来要看看 SqlSession 的创建过程和运行过程,首先调用了 sqlSessionFactory.openSession() 方法。该方法默认实现类...

    用户5224393
  • 使用Faster-Rcnn进行目标检测(实践篇)

    原理 上一篇文章,已经说过了,大家可以参考一下,Faster-Rcnn进行目标检测(原理篇) 实验 我使用的代码是python版本的Faster Rcnn,官方...

    GavinZhou
  • 简历被刷、面试被挂、找个数据分析师工作这么难?

    今天分享一篇来自于李启方老师(公众号:数据分析不是个事儿)关于数据分析师求职面试经验帖,以下为分享原文:

    张俊红
  • GitHub 标星 3.2w!史上最全技术面试手册!

    简历怎么写才能吸引 HR 的眼光,可能会被技术老大问到哪些常见问题,拿到 Offer 之后怎样才能让自己的优势最大化然后优中选优?

    GitHubDaily

扫码关注云+社区

领取腾讯云代金券