在C#中,有四种传递参数方式:

1. 传值 (value) : 无额外修饰符

2. 传址(reference) : 需修饰符Ref,传入函数的参数必须先赋值

3. 输出参数(output): 需修饰符out,适用于return多个返回值,必须在方法中赋值

4.数组参数 (array):需修饰符params

引用网上一段话:ref 是有进有出(进时需赋值,内部可以修改,并且修改后的值函数结束后仍将保留)

而out是只出不进 (外部即便赋值,也不会传入函数内,编译器将提示该参数未被初始化,在函数内必须赋值,修改后和Ref参数一样,其值将保留)

class Program
{
static void Main(string[] args)
{
int m = 0;// ref 参数使用前必须初始化赋值
int k=100; // out 参数使用前不用初始化赋值,即便初始化,当使用out引用后,编译器仍将认为其未初始化
MessageBox.Show(k.ToString()); //返回100
MessageBox.Show(RefValue(1, ref m).ToString());//返回1
MessageBox.Show(m.ToString());//返回222
MessageBox.Show(OutValue(1, out k).ToString());//返回223
MessageBox.Show(k.ToString());//返回222
} private static int RefValue(int i, ref int j)
{
int k = j;
j = 222;
return i + k;
} private static int OutValue(int i, out int j)
{
//int k = j; //即便在外部定义了j=100 ,但任然无法使用,编译器提示未初始化
j = 222;
return i + j;
}
}

传值参数在方法中如果改变了参数的值,其改变后的值只能在方法内使用,方法调用完成后参数只会保留原来传入时的值。

通过以上测试,可以看到out 和ref 应用骏相当于传递指针,故其修改将直接修改原参数的值。

网上看到:http://greatverve.cnblogs.com/archive/2012/02/27/ref-out.html

属性不是变量,不能作为ref 和out参数传递,这里记录下来

C# Ref 与out 的区别的更多相关文章

  1. ref和out的区别,值类型和引用类型的使用

    今天刚刚明白ref和out的区别,只限于个人理解如有不同请赐教,谢谢 首先我感觉ref和out是针对于值类型来说,以前一直认为是针对于引用类型看下面的一段代码 1.首先结果 i=0:ints[0]=0 ...

  2. ref和out的区别?

    ref 和out的区别在面试中会常问到: 首先:两者都是按地址传递的,使用后都将改变原来参数的数值. 其次:ref可以把参数的数值传递进函数,但是out是要把参数清空,就是说你无法把一个数值从out传 ...

  3. ref和out的区别

    ref类型参数是按地址传递,能改变原来的数值.使用ref传参前,变量必须赋值. 带有ref类型参数的函数,不会清空变量,所以离开该函数的时候,所有ref引用的变量可以赋值也可以不赋值. out类型参数 ...

  4. 浅谈C#中ref与out的区别

    在C#这门高级语言中,你是否注意过ref与out的用法?你是否为在调用方法时需要多个返回值呢?不用急,接下来,我们去一起去研究一下这个问题... 其实呢,C#语言中,参数的传递一共有两种方法,值传递和 ...

  5. C#中的ref和out的区别

    转载原地址 http://www.cnblogs.com/gjahead/archive/2008/02/28/1084871.html ref和out的区别在C# 中,既可以通过值也可以通过引用传递 ...

  6. 关于ref与out的区别

    写在最前面 这几天一直在公司接受培训,都是一些基础的知识,同时也乘着这个机会巩固一下自己的基础,基础太重要了.前些时一直看的是多线程方面的知识,接下来我会写一些其他方面的知识,毕竟作为一个实习新人得和 ...

  7. C#中ref和out的区别浅析

    这篇文章主要介绍了C#中ref和out的区别浅析,当一个方法需要返回多个值的时候,就需要用到ref和out,那么这两个方法区别在哪儿呢,需要的朋友可以参考下   在C#中通过使用方法来获取返回值时,通 ...

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

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

  9. ref与out的区别、冒泡排序、普通排序,以及二分法查询

    一.首先我们先讲一下ref与out的区别和使用方法: 1.ref与out的区别: out:需要在使用前声明变量,分配地址但不能赋值,但是需要在使用中的时候需要初始化(进入方法体中的时候需要先赋值在使用 ...

  10. Spring框架xml配置中属性ref与value的区别

    1.spring批量扫描mybatis的mapper,使用value 2.spring管理mybatis的单个mapper,用的是ref 虽然引用的是同一个bean,但两个对象的属相类型明显不一样,一 ...

随机推荐

  1. 【转】ButterKnife的使用--不错

    原文网址:http://www.cnblogs.com/exmyth/p/4779763.html ButterKnife是一个Android View注入的库. 1.开始使用 1.1 配置Eclip ...

  2. JS思维导图

  3. Total Commander快捷键

    (1)tab键---切换左.右两个大的窗口:

  4. sql server 自定义函数

    create function 函数名 (@pno int) returns int as begin declare @a int if not exists(select * from perso ...

  5. ATL ActiveX 非管理员权限发布(支持vs2005)

    在win7系统中,vs2005开发的atl activex需要管理员权限才能注册. 解决方法: PerUserRegistration.h #pragma once class PerUserRegi ...

  6. java基础(十五)集合(二)

    这里有我之前上课总结的一些知识点以及代码大部分是老师讲的笔记 个人认为是非常好的,,也是比较经典的内容,真诚的希望这些对于那些想学习的人有所帮助! 由于代码是分模块的上传非常的不便.也比较多,讲的也是 ...

  7. Web---文件上传-用apache的工具处理、打散目录、简单文件上传进度

    我们需要先准备好2个apache的类: 上一个博客文章只讲了最简单的入门,现在来开始慢慢加深. 先过渡一下:只上传一个file项 index.jsp: <h2>用apache的工具处理文件 ...

  8. PHP中 magic_quotes_gpc 和 magic_quotes_runtime 区别及其反斜线转义问题

    php中关于反斜线转义: php中数据的魔法引用函数 magic_quotes_gpc  或 magic_quotes_runtime     设置为on时,当数据遇到 单引号' 和 双引号" ...

  9. hdu 1159 Palindrome(回文串) 动态规划

    题意:输入一个字符串,至少插入几个字符可以变成回文串(左右对称的字符串) 分析:f[x][y]代表x与y个字符间至少插入f[x][y]个字符可以变成回文串,可以利用动态规划的思想,求解 状态转化方程: ...

  10. php 燕十八 观察者模式代码例子

    <?php class user implements SplSubject { public $lognum; public $hobby; protected $observers=null ...