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. silk-GUI图形界面开发一个词典

    了解使用的库 Silk内置了一些GUI类库供使用者开发MacOS上的图形界面程序,只需引用gui.si即可 准备 首先要知道app需要什么功能,这里我要的是查询单词,可以听语音,还可以存储生词! 那么 ...

  2. 仙人指路,引而不发,Go lang1.18入门精炼教程,由白丁入鸿儒,Golang中New和Make函数的使用背景和区别EP16

    Golang只有二十五个系统保留关键字,二十几个系统内置函数,加起来只有五十个左右需要记住的关键字,纵观编程宇宙,无人能出其右.其中还有一些保留关键字属于"锦上添花",什么叫锦上添 ...

  3. Web开发框架『express』的基本使用 —— { }

    基本 res.send([body]) 和 res.end([data] [, encoding]) 的区别 1.参数的区别: res.send([body]): body这个参数可以是[Buffer ...

  4. 聊聊 asp.net core 认证和授权

    使用asp.net core 开发应用系统过程中,基本上都会涉及到用户身份的认证,及授权访问控制,因此了解认证和授权流程也相当重要,下面通过分析asp.net core 框架中的认证和授权的源码来分析 ...

  5. 八皇后代码C语言版本

    y = x + b   ->    y-x = b   主对角线上,行下标与列下标之差相等y = -x + b  ->    y+x = b   副对角线上,行下标与列下标之和相等主对角线 ...

  6. C#,使用NPOI,导出excel文件

    /// <summary> /// 导出excel文件 /// </summary> /// <param name="dt">Table表数据 ...

  7. Elastic:Elasticsearch的分片管理策略

  8. Beats:Beats 入门教程 (一)

  9. yaml文件执行后常见错误解决

    yaml文件中个别数值有大写,报错信息如下 : The Deployment "my-nginx" is invalid: spec.template.spec.volumes[0 ...

  10. csv->html

    seg1=''' <!DOCTYPE HTML>\n<html>\n<body>\n<meta charset=gb> <h2 align=cen ...