ref和out 传递参数(C#)
1.参数传递默认都是传递栈空间里面存储的内容
2.如果添加了ref那么传递的都是栈空间地址,而不再是栈空间里面的内容
3.如果添加了out,那么传递的也是栈空间的地址
//写一个方法计算一个int类型数组中每个元素的总和以及最大值和最小值
/// <summary>
///
/// </summary>
/// <param name="intArray"></param>
/// <returns></returns>
static void GatValue(int[] intArray, ref int sum, ref int max, ref int min)
{ sum = ;
max = intArray[];
min = intArray[];
for (int i = ; i < intArray.Length; i++)
{
//总和
sum += intArray[i]; //最大值
if (max < intArray[i])
{
max = intArray[i];
} //最小值
if (min > intArray[i])
{
min = intArray[i];
}
}
}
static void Main(string[] args)
{
int[] intArray={,,,,,,,,,};
int sum = , max = , min = ;
//int sum = 0, max = 0, min; //如果min变量在使用的时候,没有赋值,在使用ref关键字传递参数的时候,就会报错,错误消息:“使用了未赋值的局部变量”
GatValue(intArray, ref sum,ref max,ref min);
Console.Write(sum+" "+max+" "+min);
Console.ReadKey();
}
Mian函数
static void Main(string[] args)
{
int[] intArray={,,,,,,,,,};
// int sum = 0, max = 0, min = 0;
int sum = , max = , min;
GatValue(intArray, ref sum,ref max,out min);
Console.Write(sum+" "+max+" "+min);
Console.ReadKey();
} static void GatValue(int[] intArray, ref int sum, ref int max, out int min)
{ sum = ;
max = intArray[];
min = intArray[];
for (int i = ; i < intArray.Length; i++)
{
//总和
sum += intArray[i]; //最大值
if (max < intArray[i])
{
max = intArray[i];
} //最小值
if (min > intArray[i])
{
min = intArray[i];
}
}
}
min变量out传递参数
static void GatValue(int[] intArray, ref int sum, ref int max, out int min)
{
//这里要返回三个变量的值,只能是,通过返回值调用了
sum = ;
max = intArray[];
// min = intArray[0];
for (int i = ; i < intArray.Length; i++)
{
//总和
sum += intArray[i]; //最大值
if (max < intArray[i])
{
max = intArray[i];
} ////最小值
//if (min > intArray[i])
//{
// min = intArray[i];
//}
}
} static void Main(string[] args)
{
int[] intArray={,,,,,,,,,};
// int sum = 0, max = 0, min = 0;
int sum = , max = , min;
GatValue(intArray, ref sum,ref max,out min);
Console.Write(sum+" "+max+" "+min);
Console.ReadKey();
}
错误的例子,out参数在使用的时候,必须在方法体内,为变量赋值
这里第四个代码段,里面,使用了out参数传递的变量min,在方法体内没有被赋值,运行的时候会报错:“ 控制离开当前方法之前必须对 out 参数“min”赋值 “
区别:ref传递的参数必须先赋值再使用;
out可以赋值也可以不赋值,但是在方法体内必须重新赋值。
ref和out 传递参数(C#)的更多相关文章
- C# ref和out传递参数总结
如有雷同,不胜荣幸,若转载,请注明 C#中ref和out传递参数总结,两个都可用来传递参数,ref使用时必须先进行初始化,out则不需要,只要在返回之前赋值即可,文字废话到此,下面直接上例子 ref例 ...
- 给方法传递参数:ref参数和out参数
/*--------------------------------------------------- 给方法传递参数:ref参数和out参数 (P106) ------------------- ...
- 工作中的趣事:聊聊ref/out和方法参数的传递机制
0x00 前言 我在之前的游戏公司工作的时候,常常是作为一只埋头实现业务逻辑的码农.在工作之中不常有同事会对关于编程的话题进行交流,而工作之余也没有专门的时间进行技术分享.所以对我而言上家虽然是一家游 ...
- React对比Vue(03 事件的对比,传递参数对比,事件对象,ref获取DOM节点,表单事件,键盘事件,约束非约束组件等)
import React from 'react'; class Baby extends React.Component { constructor (props) { super(props) t ...
- 在 Angularjs 中 ui-sref 和 $state.go 如何传递参数
1 ui-sref.$state.go 的区别 ui-sref 一般使用在 <a>...</a>: <a ui-sref="message-list" ...
- 通过List<String>动态传递参数给 sqlcommand.Parameters
通过List<String>动态传递参数 private void GetallChecked_TreeNote(TreeNodeCollection aNodes, ref int To ...
- C#传递参数
与函数交换数据的最好方式就是传递参数,在C#中有四种方法来控制参数如何传递给目标方法 C#中的参数修饰符 无修饰 如果一个参数没有用参数修饰符,则认为它将按值传递 out 输出参数由被调用的方法赋值. ...
- spring aop通过joinpoint传递参数
三.总结. 我们可以通过Advice中添加一个JoinPoint参数,这个值会由spring自动传入,从JoinPoint中可以取得. 三.总结. 我们可以通过Advice中添加一个JoinPoint ...
- c#基础语言编程-按值类型和引用类型传递参数
引言 在介绍传递参数介绍前,请明白参数类型和传递方式是不同的.传递方式分为按值类型和引用类型传递参数.参数类型有值类型和引用类型,这个和C++是不同的.这里的传递方式对应c++中的深复制和浅复制. 两 ...
随机推荐
- linux上挂载windows共享文件夹
linux上挂载windows共享文件夹 1.共享windows目录 挂载之前得创建一个有password的用户(当前用户也能够),并将你要挂载的目录进行共享,并赋予读写权限 如图. watermar ...
- Swift编程语言SequenceType协议中的一些比较有用的接口
在Swift编程语言中,大部分容器类(比如Array.Dictionary)都实现了SequenceType协议.SequenceType协议中有不少有趣且简便的方法可用来实现我们不少实际需求.这里将 ...
- Android开发:第四日番外——Assets文件夹和RAW文件夹区别
话说上回说到SQLite数据库,其中涉及到把已经设计好的数据库打包到APK中,提到可以放置在Assert文件夹或者RAW文件夹中,那么两者到底有什么区别呢?让我们来探究一下. 一.res/raw和as ...
- 文件系统管理 之 实例解说 fdisk 使用方法
一.fdisk 的介绍: fdisk - Partition table manipulator for Linux ,译成中文的意思是磁盘分区表操作工具:本人译的不太好,也没有看中文文档:其实就是分 ...
- ECSHOP后台SQL查询提示错误 this sql May contain UPDATE,DELETE,TRUNCATE,ALTER,DROP,FLUSH,INSERT
一).首先说一下错误现象:市面上流行的绝大部分ECSHOP模板,安装的时候都需要执行一段或几段SQL语句来修改数据结构或者初始化一些数据.大多数ECSHOP管理员为了省事,都会通过 “ECSHOP后台 ...
- 【css3】如何自定义 placeholder 文本颜色
昨天写了一篇基于 jquery 实现 ie 浏览器兼容 placeholder 效果,具体内容点击传送门.不过还是有点小瑕疵,就是不能设置 placeholder 文本颜色.本文主要介绍利用 css ...
- win7 VS2012+openCV-2.4.11 配置
1.下载 http://opencv.org/downloads.html (根据版本的不同选择,这里选择的是opencv-2.4.11) 2.安装 3.环境变量配置 计算机->属性->高 ...
- Web功能之组织结构图
前提:由于项目需要显示组织结构图的形式 工具:VS2010 项目:ASP.NET 自带的web项目 (带模板页) 插件:OrgChart(依赖:OrgChart.dll).JOrgChart 不多说 ...
- 多线程调用WebClient速度变慢的问题
设置 System.Net.ServicePoint 对象所允许的最大并发连接数 System.Net.ServicePoint 对象允许的最大并发连接数.默认值为 2 System.Net.Serv ...
- Qt编写自定义控件二动画按钮
现在的web发展越来越快,很多流行的布局样式,都是从web开始的,写惯了Qt widgets 项目,很多时候想改进一下现有的人机交互,尤其是在现有的按钮上加一些动画的效果,例如鼠标移上去变大,移开还原 ...