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++中的深复制和浅复制. 两 ...
随机推荐
- Jquery 实现input回车时跳转到下一个input元素
/** * 回车时跳转到下一个元素 * @Author HTL * @DateTime 2016-12-30T11:33:25+0800 * @param {[type]} $input [INP ...
- Codeforces Beta Round #17 A - Noldbach problem 暴力
A - Noldbach problem 题面链接 http://codeforces.com/contest/17/problem/A 题面 Nick is interested in prime ...
- 如何在使用MAMP环境下安装MySQLdb
我的电脑上没有安装XAMPP,而是安装了MAMP PRO,其实两者都差不多,都是PHP+MySQL+Apache的集成环境,只是MAMP的GUI界面更华丽一些,但是也更复杂一些. 好了不说这些,说说问 ...
- 迁移至个人blog
该博客的部分内容已迁移至个人站点:http://dxjia.cn/ 这里后续不再维护,欢迎访问新站点.
- Java 中类的加载顺序
如果类A和类B中有静态变量,静态语句块,非静态变量,非静态语句块,构造函数,静态方法,非静态方法,同时类A继承类B,请问当实例化A时,类内部的加载顺序是什么? 测试代码如下: Class B: pub ...
- Net框架下-ORM框架LLBLGen的简介
>对于应用程序行业领域来说,涉及到Net框架的,在众多支持大型项目的商用ORM框架中,使用最多的目前了解的主要有三款: 1.NHibernate(从Java版移植来的Net版). 2.微软的EF ...
- Jquery中使用setInterval和setTimeout会提示缺少对象的错误,解决方法如下:
直接在ready中调用其他方法,会提示缺少对象的错误,解决方法如下: 方法1. 应用jQuery的扩展可以解决这个问题. $(document).ready(function(){ $.extend( ...
- Swift 程序流程控制
Swift采用类同c语言的流程控制语句,if, for, for-in, while, do-while , switch, break, continue .Swift语言的Switch语句自动 ...
- 彻底解决Google浏览器CSS居中问题
div做的界面时,又出现CSS hack(CSS兼容浏览器问题)在IE内核浏览器或者firefox浏览器中都能居中,没有居中的可以用其特殊标签来设定居中,如下划线 _ IE6优先识别,!importa ...
- 移动端前端框架UI库(Frozen UI、WeUI、SUI Mobile)
Frozen UI 自述:简单易用,轻量快捷,为移动端服务的前端框架. 主页:http://frozenui.github.io/ 开发团队:QQVIP FD Team Github:https:// ...