C#中ref和out关键字的应用以及区别(参数修饰符)
ref
ref的定义
ref是reference的缩写,通过引用来传递参数的地址,ref基本上是服务于值类型的
ref的使用
//不使用 ref;
void Method(int myRefInt)
{
myRefInt += 66; //在不使用ref的时候,方法在对参数执行操作后会直接销毁
} int number = 1;
Method(number);
Console.WriteLine(number);
**//输出 : 1;** //使用ref
void Method(ref int myRefInt)
{
myRefInt += 66; //这里传递进来的是值类型参数的引用地址,在方法里直接修改了地址对应的值
} int number = 1;
Method(ref number);
Console.WriteLine(number); **//输出:67**
out
out的定义
作为参数修饰符,通过引用而不是通过值传递参数
out的使用
//从结果和传参的方式来看和ref几乎没有区别
int number; Method(number); void Method(int myRefInt)
{
myRefInt = 66;
} Console.WriteLine(number);
//输出:0 int number; Method(out number); void Method(out int myRefInt)
{
myRefInt = 66;
} Console.WriteLine(number);
//输出:66
ref和out的区别
使用ref传递参数的时候,被修饰的参数必须要有值
使用out可以将一个未赋值的变量作为参数传递
class RefAndOut
{
public static void OutDouble(out int outInt)
{
outInt = 2;
Console.WriteLine("outInt is:"+outInt);
}
public static void RefDouble(ref int parInt)
{
parInt *= 2;
Console.WriteLine("refInt is:"+parInt);
Console.ReadKey();
}
public static void NormalDouble(int IntPar)
{
IntPar = 1;
IntPar *= 2;
Console.WriteLine("normalInt is:" + IntPar);
Console.ReadKey();
}
static void Main(string[] args)
{
int refInt;
int outInt;
int normalInt;
OutDouble(out outInt); //success 可以传入一个未赋值的变量
RefDouble(ref refInt); //error 使用了未赋值的变量
NormalDouble(normalInt); //error 使用了未赋值的变量
}
}
ref和out存在区别的原因
ref:直接将外部变量的地址传进方法
out:在方法内部为传进来的参数非配地址,然后将地址返回并赋值给外部的变量(这就是out可以传进未赋值的变量,因为在内部重新分配地址)
---------------
原文地址:http://t.csdn.cn/QHRWN
C#中ref和out关键字的应用以及区别(参数修饰符)的更多相关文章
- C#中ref和out关键字的应用以及区别
		首先:两者都是按地址传递的,使用后都将改变原来参数的数值. 其次:ref可以把参数的数值传递进函数,但是out是要把参数清空,就是说你无法把一个数值从out传递进去的,out进去后,参数的数值为空,所 ... 
- 参数修饰符ref,out ,params的区别
		参数修饰符ref,out ,params的区别 C#中有三个关键字-ref,out ,params,可是这三个之间的区别你都明白了吗? 那么我们就来认识一下参数修饰符ref,out ,params吧, ... 
- C#的参数修饰符out,params,ref
		using System; namespace ParamsProgram { class TestParams { public static void Main(string[] args)//s ... 
- C#中方法的参数修饰符
		做项目久了,有的时候真的需要静下心来认真的总结一下自己所用到的技术,而不是每天依葫芦画瓢,每天忙忙碌碌,到头来不知道自己忙了个啥,学了什么,自己到底掌握了多少知识.所以我想回顾一下C#的基础知识,把重 ... 
- 为什么C#中ref和out 关键字 ?
		需求假设:现需要通过一个叫Swap的方法交换a,b两个变量的值.交换前a=1,b=2,断言:交换后a=2,b=1. 现编码如下: class Program { static void ... 
- c#中ref和out 关键字
		问题:为什么c#中要有ref和out?(而java中没有)需求假设:现需要通过一个叫Swap的方法交换a,b两个变量的值.交换前a=1,b=2,断言:交换后a=2,b=1. 现编码如下: class ... 
- C# 中ref与out关键字区别
		ref 关键字通过引用传递的参数的内存地址,而不是值.简单点说就是在方法中对参数的任何改变都会改变调用方的基础参数中.代码举例: class RefExample { static void Meth ... 
- 关于c#中”ref”和”out”关键字的一些理解
		一. 综述(本文内容大部分来自网络,经本人整理而成,仅供学习参考,不免理解错误,欢迎批评指正) 在c#中,方法的参数传递有四种类型: (1) 传值参数(by value) 传值参数无需额外的修饰符.传 ... 
- out 和 ref 参数修饰符
		整理自MSDN out: out 关键字通过引用传递参数.这与 ref 关键字相似,只不过 ref 要求在传递之前初始化变量.若要使用 out 参数,方法定义和调用方法均必须显式使用 out 关键字. ... 
随机推荐
- Luogu4427 [BJOI2018]求和 (树上差分)
			预处理,树上差分.注意深度减一 #include <cstdio> #include <iostream> #include <cstring> #include ... 
- Luogu3871 [TJOI2010]中位数 (平衡树)
			"#define int long long" 导致100pts \(\rightarrow\) 80pts #include <iostream> #include ... 
- vue项目打包后使用reverse-sourcemap反编译到源码(详解版)
			首先得说一下,vue项目中productionSourceMap这个属性.该属性对应的值为true|false. 当productionSourceMap: true,时: 1.打包后能看到xxx ... 
- LOJ6062「2017 山东一轮集训 Day2」Pair(Hall定理,线段树)
			题面 给出一个长度为 n n n 的数列 { a i } \{a_i\} {ai} 和一个长度为 m m m 的数列 { b i } \{b_i\} {bi},求 { a i } \{a_i\} ... 
- [HDU3976]Electric resistance(电阻)(信竞&物竞)(高斯消元)
			题面 Problem Description Now give you a circuit who has n nodes (marked from 1 to n) , please tell abc ... 
- 【PostgreSQL】PostgreSQL 15移除了Stats Collector
			试用即将发行的PostgreSQL 15的人会发现少了一个后台进程: postgres 1710 1 0 04:03 ? 00:00:00 /usr/pgsql-15/bin/postmaster ... 
- 记一次用arthas排查jvm中CPU占用过高问题
			记一次使用arthas排查jvm中CPU占用过高问题.这工具屌爆了 碾压我目前使用的全部JVM工具. 安装 小试 curl -O https://arthas.aliyun.com/arthas-bo ... 
- mydodo协议
			mydodo协议 目录 数据帧结构 命令 协议 代码样例 数据帧结构 帧头1 帧头2 设备号 命令 数据长度 数据 0x4D 0x59 xxx cmd nByte data 例子:设备my01 的继电 ... 
- 安装docker-compose--翻译
			Install Docker Compose 译文 安装 Docker Compose 你可以在macOS.Windows.64-bit Linux上运行 Compose 前提条件 Docker Co ... 
- Karmada v1.3:更优雅 更精准 更高效
			摘要:最新发布的1.3版本中,Karmada重新设计了应用跨集群故障迁移功能,实现了基于污点的故障驱逐机制,并提供平滑的故障迁移过程,可以有效保障服务迁移过程的连续性(不断服). 本文分享自华为云社区 ... 
