• 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
    版权声明:本文为博主原创文章,转载请附上博文链接!

  • 相关阅读:
    wing ide 注释
    dn.net/blueheart20/article/details/22080489
    ubuntu安装R时候增加软件源到sources.list,sudo apt-get update不能更新
    ubuntu install oracle jdk
    Rhadoop安装
    有向图tarjan算法求连通分量的粗浅讲解、证明, // hdu1269
    POJ 3080 多个串最长公共子序列
    POJ 3461 kmp 应用
    POJ2752 NEXT[J]特性应用利用。
    HDU 1358字符串循环节问题 ,next数组
  • 原文地址:https://www.cnblogs.com/asdyzh/p/9819740.html
Copyright © 2020-2023  润新知