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关键字的应用以及区别(参数修饰符)的更多相关文章

  1. C#中ref和out关键字的应用以及区别

    首先:两者都是按地址传递的,使用后都将改变原来参数的数值. 其次:ref可以把参数的数值传递进函数,但是out是要把参数清空,就是说你无法把一个数值从out传递进去的,out进去后,参数的数值为空,所 ...

  2. 参数修饰符ref,out ,params的区别

    参数修饰符ref,out ,params的区别 C#中有三个关键字-ref,out ,params,可是这三个之间的区别你都明白了吗? 那么我们就来认识一下参数修饰符ref,out ,params吧, ...

  3. C#的参数修饰符out,params,ref

    using System; namespace ParamsProgram { class TestParams { public static void Main(string[] args)//s ...

  4. C#中方法的参数修饰符

    做项目久了,有的时候真的需要静下心来认真的总结一下自己所用到的技术,而不是每天依葫芦画瓢,每天忙忙碌碌,到头来不知道自己忙了个啥,学了什么,自己到底掌握了多少知识.所以我想回顾一下C#的基础知识,把重 ...

  5. 为什么C#中ref和out 关键字 ?

    需求假设:现需要通过一个叫Swap的方法交换a,b两个变量的值.交换前a=1,b=2,断言:交换后a=2,b=1. 现编码如下: class Program   {       static void ...

  6. c#中ref和out 关键字

    问题:为什么c#中要有ref和out?(而java中没有)需求假设:现需要通过一个叫Swap的方法交换a,b两个变量的值.交换前a=1,b=2,断言:交换后a=2,b=1. 现编码如下: class ...

  7. C# 中ref与out关键字区别

    ref 关键字通过引用传递的参数的内存地址,而不是值.简单点说就是在方法中对参数的任何改变都会改变调用方的基础参数中.代码举例: class RefExample { static void Meth ...

  8. 关于c#中”ref”和”out”关键字的一些理解

    一. 综述(本文内容大部分来自网络,经本人整理而成,仅供学习参考,不免理解错误,欢迎批评指正) 在c#中,方法的参数传递有四种类型: (1) 传值参数(by value) 传值参数无需额外的修饰符.传 ...

  9. out 和 ref 参数修饰符

    整理自MSDN out: out 关键字通过引用传递参数.这与 ref 关键字相似,只不过 ref 要求在传递之前初始化变量.若要使用 out 参数,方法定义和调用方法均必须显式使用 out 关键字. ...

随机推荐

  1. JavaDoc文档生成详细操作

    JavaDoc练习 JavaDoc是一种将注释生成HTML文档的技术,是用来生成自己API文档的. 参数信息 /* @author 作者名 @version 版本号 @since 知名最早需要使用的j ...

  2. LuoguP1858 多人背包(DP)

    第\(K\)优解这类问题可在\(DP\)过程中通过添维解决.归并出当前前\(K\)大的解. #include <iostream> #include <cstdio> #inc ...

  3. Excel 查找函数(二):VLOOKUP

    函数讲解 [语法]VLOOKUP(lookup_value, table_array, col_index_num, [range_lookup]) [参数]函数一个有四个参数,其中有三个必填参数:一 ...

  4. [HNOI2011]卡农 (数论计数,DP)

    题面 原题面 众所周知卡农是一种复调音乐的写作技法,小余在听卡农音乐时灵感大发,发明了一种新的音乐谱写规则. 他将声音分成 n n n 个音阶,并将音乐分成若干个片段.音乐的每个片段都是由 1 1 1 ...

  5. iOS 组件化及二进制化的探索

    组件化的优缺点 组件化的拆分 组件与组件之间如何进行通讯(路由) 从Cocopods拉取代码的过程 远程索引库里很多的.spec文件,该文件记录了很多内容,如用户名,框架名称,描述,框架的地址 Pod ...

  6. KingbaseES V8R6 集群环境wal日志清理

    案例说明: 1.对于集群中的wal日志,除了需要在备库执行recovery外,在集群主备切换(switchover或failover)时,sys_rewind都要读取wal日志,将数据库恢复到一致性状 ...

  7. .NET 反向代理-YARP

    什么是 YARP YARP (另一个反向代理) 设计为一个库,提供核心代理功能,你可以根据应用程序的特定需求进行自定义. YARP 是使用 .NET的基础架构构建在 .NET上的.YARP 的主要不同 ...

  8. 助力培养高质量AI人才,璞公英乐学平台在日本深受好评!

    璞公英乐学平台(原名"璞睿魔数")自进入日本市场以来,受到日本用户的广泛好评.近日,日本AI门户网站AIsmiley在发刊的杂志<AI人才育成指南>中对璞公英乐学平台做 ...

  9. stm32fxx_hal_i2c.c解读之HAL_I2C_Mem_Write

    HAL_I2C_Mem_Write()函数位于stm32fxx_hal_i2c.c文件的2432行,源代码对该函数的解释如下图 HAL_StatusTypeDef HAL_I2C_Mem_Write( ...

  10. MySQL8 二进制日志

    启用二进制日志 # cat /etc/my.cnf [mysqld] server_id=100 log_bin=/var/log/mysql/binlogs/server1 # mkdir -p / ...