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

C#总结---方法的out参数和ref参数的更多相关文章

  1. 给方法传递参数:ref参数和out参数

    /*--------------------------------------------------- 给方法传递参数:ref参数和out参数 (P106) ------------------- ...

  2. C#中的out 参数,ref参数,值参数

    大家可能在编码中或多或少的使用过out的ref,但是是否注意过他两的详细用法以及区别? 本文想介绍下详细介绍下out参数,ref参数以及一般值参数. 值参数 在使用参数时,把一个值传递给函数使用的一个 ...

  3. 【C#小知识】C#中一些易混淆概念总结---------数据类型存储,方法调用,out和ref参数的使用

    这几天一直在复习C#基础知识,过程中也发现了自己以前理解不清楚和混淆的概念.现在给大家分享出来我的笔记: 一,.NET平台的重要组成部分都是有哪些 1)FCL (所谓的.NET框架类库) 这些类是微软 ...

  4. out参数,ref参数,params参数数组

    params参数数组 params关键字可以为方法指定数目可变的参数.params关键字修饰的参数,可以传入任意数目的同类型参数,甚至可以不传入参数. 不过params修饰的参数必须是方法的最后一个参 ...

  5. C# 中out 参数 和 ref参数的区别

    C#中共有4种参数类型,分别是 传值(by value), 传址 (by reference), 输出参数 (by output), 数组参数 (by array) by value => 传值 ...

  6. 方法的形参、ref参数、out参数的区别

    我们在定义方法时,经常会涉及到传参.因为引用类型的数据在用变量存储时,是存储的地址,所以在传参时,依然是传递的地址,但是值类型的数据在传参时就会有所不同.值类型数据在调用方法传参时,普通情况下是值传递 ...

  7. ref 参数与out参数

    变量作为参数传给方法,同时希望在方法执行完成后对参数,反应到变量上面.就需要用到ref和out这两个参数. ref参数:在 传入前必须先初始化 out参数:不需要做预先的处理

  8. c#基础学习(0806)之可变参数、ref和out关键字的简单使用

    params可变参数: 1.无论方法有几个参数,可变参数必须出现再参数列表的最后,可以为可变参数直接传递一个对应类型的数组: 2.可变参数可以传递参数也可以不传递参数,如果不传递参数,则数组为一个长度 ...

  9. c#基础学习(0724)之可变参数、ref和out

    params可变参数,无论有几个参数,必须出现在参数列表的最后,可以为可变参数直接传递一个对应类型的数组 #region 可变参数 //1.如果方法有多个参数,可变参数可以作为最后一个参数 //2.可 ...

随机推荐

  1. Eclipse快捷键大全(转载)

    一·eclipse 中的一些常用的快捷键Eclipse的编辑功能非常强大,掌握了Eclipse快捷键功能,能够大大提高开发效率.Eclipse中有如下一些和编辑相关的快捷键.   1. [ALT+/] ...

  2. EasyDarwin添加自定义的服务模块EasyMyModule

    EasyDarwin模块的要求 每个QTSS模块必须实现两个方法函数: 一个Main入口函数,服务器在启动的时候将调用这个方法函数,来对您开发的模块所在的QTSS stub库进行初始化. 一个Disp ...

  3. Java开发面试题

  4. 15款创建美丽幻灯片的 jQuery 插件

    1. Skippr Skippr 是一个超级简单的 jQuery 幻灯片插件.仅仅是包含你的网页中引入 jquery.skippr.css 和 jquery.skippr.js 文件就能使用了. Sk ...

  5. tornado安全应用之cookie

    目前大多数服务器判断用户是否登录一般通过session机制,Tornado 通过 set_secure_cookie 和 get_secure_cookie 方法直接支持了这种功能.原理类似于sess ...

  6. dij+堆优化

    写这个dij+堆优化的原因是有些地方卡SPFA,只能搞这个: 香甜的奶油: #include<iostream> #include<cstdio> #include<cs ...

  7. jquery特效(6)—判断复选框是否选中进行答题提示

    前面有一段时间思想开了小差,跟着师父学习了一段时间才发现差距很大,看来我要奋起直追~\(≧▽≦)/~啦啦啦. 最近公司在做一个项目,需要根据用户选择的选项给出相应的提示,下面来看我写的测试程序的效果: ...

  8. haproxy参数解析

    HAProxy工作于隧道模式,其仅检查每一个连接的第一个请求, 1. option abortonclose #当服务器负载过高时,将自动关闭队列中处理时间较长的连接请求 2. option http ...

  9. postNotificationName 消息传递详解

      1.定义消息创建的关联值 也就是找到方法的标志 NSString *const GameToIPhoneNotification = @"GameToIPhoneNotification ...

  10. AndroidManifest配置之uses-sdk

    uses-sdk配置 uses-sdk用来设置app对android系统的兼容性.它包含三个可选的配置项,分别为android:minSdkVersion,android:targetSdkVersi ...