向方法传递参的时候,对应的参数通常会用实参的拷贝来初始化。就是说随便在方法内部进行怎样的修改,都不会影响作为参数传递的变量的原始值。

  通过上面的例子我们可以看出来,如果一个方法的参数是引用类型,那么使用哪个参数来进行任何修改都会改变传入的参数所引用的数据,关键在于虽然引用的数据发生了变化,但是传入的参数是没有变的。虽然可以通过参数来修改实参引用的对象,但是不可以修改实参的本身。但是在一些情况下,我们希望方法能够实际的修改一个参数,所以c#给我们提供了ref和out关键字。

  使用ref参数,作用参数的所有操作都会作用于原始实参,应为参数和实参引用同一个对象。通过下面的例子我们可以看出通过使用ref关键字使得传入的参数发生了改变,就相当于我们把上一个方法运算的结果返回了回来。下面的parm++相当于reg++

  out关键字的语法和ref关键字相似,可以为参数附加out前缀,使得参数成为实参的别名,但是时可以不需要初始化的,ref关键字是需要先初始化传入的参数,才能够使用。

c# ref和out参数的更多相关文章

  1. [C#]浅析ref、out参数

    转载:http://www.cnblogs.com/vd630/p/4601919.html#top 按引用传递的参数算是C#与很多其他语言相比的一大特色,想要深入理解这一概念应该说不是一件容易的事, ...

  2. Ref和Out参数的区别(转帖)

    首先,如果不使用这两个关键字,那是什么样 呢? 看下面的例子: using System;   class Test   {   static void Swap(ref int x, ref int ...

  3. 利用反射调用方法时,处理ref,out参数需要注意的问题(转)

    转自:http://www.68idc.cn/help/buildlang/ask/20150318283817.html 项目中如下的泛型方法,因为要在运行时,动态指定类型参数,所以要利用反射来实现 ...

  4. 基于params,ref,out的参数问题详解

    http://www.jb51.net/article/37967.htm 最近在写程序时遇到params,ref,out 参数问题.回头有自习看了看MSDN,才巩固了基础.现在和大家分享一下.par ...

  5. ref out 方法参数

    ref out 相似 ref和out两个关键字的作用大致相同,但是有一些微妙但是重要的区别. 两者的行为相似到连编译器都认为这两者不能被重载:public void SampleMethod(out ...

  6. C#中的ref与out参数(本文仅作为个人笔记)

    假如一个方法的参数(形参)是引用类型,那么使用那个参数来进行的任何修改都会改变参数引用的数据.但这里的关键在于,虽然引用的数据发生了变化,但参数本生没有改变——它仍然引用的是一个对象.换句话说,虽然可 ...

  7. 【又长见识了】函数传参,params参数,ref和out参数详解

    一.原来函数这样传参 先看一个函数和函数调用. static void Main(string[] args) { ; Test(num);//局部变量在使用之前赋值 //Test(10); //直接 ...

  8. 【05】C#特有的ref、out参数

    java和C#非常相似,它们大部分的语法是一样的,但尽管如此,也有一些地方是不同的. 为了更好地学习java或C#,有必要分清它们两者到底在哪里不同. 我们这次要来探讨C#特有的ref.out参数. ...

  9. c#编程基础之ref、out参数

    引例: 先看这个源码,函数传递后由于传递的是副本所以真正的值并没有改变. 源码如下: using System; using System.Collections.Generic; using Sys ...

  10. C#学习笔记13:静态方法、方法重载和ref、out参数

    静态方法 调用:如果你写的方法和Main()方法在同一个类中,直接写方法名. 如果不在一个类中,需要类名.方法名(); 非静态方法: 调用:创建一个类的对象  对象名.方法名(); Person pe ...

随机推荐

  1. opencv图片拼接报错cv::Stitcher::ERR_NEED_MORE_IMGS (1)

    #include "opencv2/imgcodecs.hpp" #include "opencv2/highgui.hpp" #include "o ...

  2. java执行字符串数学表达式【记录】

    https://stackoverflow.com/questions/3422673/evaluating-a-math-expression-given-in-string-form 1. goo ...

  3. 转场动画UINavigationControllerDelegate

    从iOS7开始,苹果更新了自定义ViewController转场的API,这些新增的类和接口让很多人困惑,望而却步.本文就从这些API入口,让读者理清这些API错综复杂的关系. 几个protocol ...

  4. jsp fmt标签格式化double数字

    <fmt:formatNumber value="${zjdl.ygdl }" pattern="0.00" />

  5. [sh]rm -rf*的防护和普通用户执行命令

    尽量用普通用户执行,因为普通用户无法删除root的文件,避免误删除 rm -rf 不可取, 尽量find+rm -rf 尽量cd && rm -rf * 加上逻辑 cd /tmp/re ...

  6. Marathon自动扩缩容(marathon-lb-autoscale)

    我们在服务里面创建如下的应用(以下是创建完复制过来的json): { "id": "/nginxtest", "cmd": null, &q ...

  7. Notes for Neural Network Methods for Natural Language Processing

    什么是深度学习?   一种机器学习算法,based on [多层][非线性变换]的[神经网络]结构 优点:可以使用 低维 稠密 连续 的向量表示不同粒度的语言单元, 还可以使用循环.卷积.递归等神经网 ...

  8. python 美化打印json数据

    #!/usr/bin/python3 # -*- coding: utf-8 -*- import json data = {'name':'张森','email':'zhangsen@qq.com' ...

  9. Shiro权限管理框架详解

    1 权限管理1.1 什么是权限管理 基本上涉及到用户参与的系统都要进行权限管理,权限管理属于系统安全的范畴,权限管理实现对用户访问系统的控制,按照安全规则或者安全策略控制用户可以访问而且只能访问自己被 ...

  10. pandas.query()

    1. 查询 已知data: 查询概率等于0.4的所有行 问题所在:query后面只支持string形式的值,而"probability"==0.4返回的是一个bool类型,结果不是 ...