我们知道,在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. iOS学习之iOS沙盒(sandbox)机制和文件操作1

    iOS学习之iOS沙盒(sandbox)机制和文件操作 接上篇 iOS学习之iOS沙盒(sandbox)机制和文件操作(一) 我们看看如何获取应用程序沙盒目录.包括真机的沙盒的目录. 1.获取程序的H ...

  2. 宜人贷蜂巢API网关技术解密之Netty使用实践

    一.背景 宜人贷蜂巢团队,由Michael创立于2013年,通过使用互联网科技手段助力金融生态和谐健康发展.自成立起一直致力于多维度数据闭环平台建设.目前团队规模超过百人,涵盖征信.电商.金融.社交. ...

  3. 分享一个小工具:Excel表高速转换成JSON字符串

    在游戏项目中一般都须要由策划制作大量的游戏内容,当中非常大一部分是使用Excel表来制作的.于是程序就须要把Excel文件转换成程序方便读取的格式. 之前项目使用的Excel表导入工具都是通过Offi ...

  4. 关于mongodb副本集读写分离 及 日志切换

    mongodb的读写分离使用Replica Sets来实现 对于replica set 中的secondary 节点默认是不可读的.在写多读少的应用中,使用Replica Sets来实现读写分离.通过 ...

  5. 提高sqlite 的运行性能(转载)

    原文地址: https://blog.devart.com/increasing-sqlite-performance.html One the major issues a developer en ...

  6. EasyPusher实现Android手机屏幕桌面直播,实时推送操作画面,用于手游直播等应用

    本文转自EasyDarwin开源团队成员John的博客:http://blog.csdn.net/jyt0551/article/details/52651194 由于Android 5.0提供了捕获 ...

  7. iOS应用的入口自定义和事件处理的自定义

    iOS应用的入口自定义和事件处理的自定义 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions: ...

  8. Spring AOP-xml配置

    在spring AOP(一)中介绍了AOP的基本概念和几个术语,现在学习一下在XML中如何配置AOP. 在XML中AOP的配置元素有以下几种: AOP配置元素 描述 <aop:config> ...

  9. poj2773 —— 二分 + 容斥原理 + 唯一分解定理

    题目链接:http://poj.org/problem?id=2773 Happy 2006 Time Limit: 3000MS   Memory Limit: 65536K Total Submi ...

  10. ansible-playbook 打通ssh无秘钥

    建议参考: http://www.cnblogs.com/jackchen001/p/6514018.html 这个代码清晰,效果佳! 参考链接: http://www.cnblogs.com/cao ...