zoukankan      html  css  js  c++  java
  • C#总结---方法的out参数和ref参数

    我们知道,在c#中,当我们在一个方法中想要访问另一个方法中的变量的时候,有两种解决方案---参数和返回值。但当需要返回多个值,并且是不同类型的值的之后应该怎么办呢?解决方案可以是

    (1)将所有类型数据转换成字符串类型,到最后再都转换回来,这样就比较麻烦了

    (2)利用方法的out参数和ref参数

    下面要跟大家介绍的就是第二个简单的方法:方法的out和ref参数

    在讲解方法的out和ref参数之前我们先看看最普通的参数传递

    static void Main(string[] args)
    {
    int number1=10;
    int number2 = 20;
    int sum = AddNumber(number1, number2);

    Console.WriteLine(number1); ;
    Console.WriteLine(number2);
    Console.WriteLine(sum);

    Console.ReadKey();
    }
    public static int AddNumber( int num1, int num2)
    {
    return num1 + num2;
    }

    显而易见,此程序的返回值是10,20,30
    方法的out参数(与最简单的参数传递差别已用红框标出)

     

    此程序的返回值为10,200,210

    概念:out是内部为外部变量赋值,out一般用在函数需要有多个返回值的场所

    总结:1.如果方法用参数out修饰了,那么参数在方法外也要用out修饰

               2. 如果方法的参数用out修饰了,那么这个参数必须在方法里进行赋值

               3.当参数在方法外进行赋值时,参数out把方法里的值传到了方法外,所以最后参数值为在方法里赋的值

    例题1:

    static void Main(string[] args)
    {
    int number1=10;
    int number2=20;
    int sum = AddNumber( number1, out number2);

    Console.WriteLine(number1); ;
    Console.WriteLine(number2);
    Console.WriteLine(sum);

    Console.ReadKey();
    }
    public static int AddNumber(int num1, out int num2)
    {
    num1 = 100;
    num2 = 200;
    return num1 + num2;
    }
    此程序的返回值为什么呢???
    开始我理所应当的认为,此程序的返回值为100,200,300,但是大家再仔细看一看,num2没有用out修饰哦,这可是一个大坑哦!

    所以,最后的结果是10,200,210

    方法的ref参数(与最简单的参数传递差别已用红框标出)

     

    此程序的返回值为10,200,210

    很容易可以看出,方法的out和ref只是修改参数,那么他们最后的返回值是相同的

    总结:1.如果方法用参数out修饰了,那么参数在方法外也要用out修饰

               2.如果方法用参数ref修饰了,那么参数在方法外必须赋初值

    那么当这种情况呢?

    例题2:

    static void Main(string[] args)
    {
    int number1=10;
    int number2=20;
    int sum = AddNumber( number1, ref number2);

    Console.WriteLine(number1); ;
    Console.WriteLine(number2);
    Console.WriteLine(sum);

    Console.ReadKey();
    }
    public static int AddNumber(int num1, ref int num2)
    {
    num1 = 100;
    num2 = 200;
    return num1 + num2;
    }


    例题1和例题2,只有num2修饰的差别,例题1用的是out修饰,返回值为10,200,210;
                                                                        例题2用的是ref修饰,返回值为100,200,300;
    由此可以看出参数out和ref修饰的差别:

    ref可以把值传到方法里,也可以把值传到方法外

    out只可以把值传到方法外
    ---------------------
    作者:Sarah何
    来源:CSDN
    原文:https://blog.csdn.net/hejingfang123/article/details/78452453
    版权声明:本文为博主原创文章,转载请附上博文链接!

  • 相关阅读:
    permission 文档 翻译 运行时权限
    TabLayout ViewPager Fragment 简介 案例 MD
    Log 日志工具类 保存到文件 MD
    OkHttp 官方wiki 翻译 MD
    Okhttp 简介 示例 MD
    OkHttp 官方Wiki之【使用案例】
    DialogPlus
    倒计时 总结 Timer Handler CountDownTimer RxJava MD
    RecyclerView 判断滑到底部 顶部 预加载 更多 分页 MD
    CSS3的媒体查询(Media Queries)与移动设备显示尺寸大全
  • 原文地址:https://www.cnblogs.com/asdyzh/p/9819740.html
Copyright © 2011-2022 走看看