在C#中,如果在方法参数前面加上ref关键字,说明参数传递的是引用,而不是值。如何理解呢?

参数是简单类型的例子

static void Main(string[] args){string temp = "a";Change(temp);Console.WriteLine(temp);ChangeByRef(ref temp);Console.WriteLine(temp);Console.ReadKey();}private static void Change(string temp){temp = temp + "--changed";}private static void ChangeByRef(ref string temp){temp = temp + "--refchanged";}

输出结果:
a
a--refchanged

● 在Change()方法中,虽然改变了temp的值,但方法没有返回值,打印temp依然是初始值a;
● 在ChnageByRef()方法中,由于加上了关键字,虽然也没有返回值,当改变temp的值后,temp的引用地址发生了改变,再次打印,temp的值为新的引用地址对应的值。

参数是类类型的例子

class Program{static void Main(string[] args){Pet p = new Pet(){Age = 5};Console.WriteLine("初始年龄是:{0}", p.Age);ChangeAge(p);Console.WriteLine("改变pet的属性值后,年龄是:{0}", p.Age);ChangeAgeByRef(ref  p);Console.WriteLine("改变pet引用地址后,年龄是:{0}", p.Age);Console.ReadKey();}private static void ChangeAge(Pet p){p.Age = 10;}private static void ChangeAgeByRef(ref Pet p){p = new Pet(){Age = 20};}}public class Pet{public int Age { get; set; }}

输出结果:

● 在ChangeAge()方法中,改变的是Pet实例的属性值。
● 在ChangeAgeByRef()方法中,改变的Pet实例的引用地址。

总结

方法参数无论是简单类型,还是类类型,当在其前加上ref关键字后,对参数的赋值,实际上是改变的是方法参数变量的引用地址。使用ref注意点:
● 使用带ref的方法之前,需要给方法参变量赋上初始值
● 无论是定义方法还是使用方法,都要带上关键字ref

使用C#中的ref关键字,用2个简单例子来说明相关推荐

  1. 如何用java语言实现C#中的ref关键字(按引用传递参数)的效果

    https://www.cnblogs.com/nnngu/p/8300164.html 转载于:https://www.cnblogs.com/cnki/p/10409684.html

  2. java+中的final关键字有哪些用法_Java中的Final关键字用法汇总及简单示例

    可能使用到final的情况有3种:数据.方法和类. 一.final数据 对于基本类型,final使数值恒定不变:而对于对象引用,final使引用恒定不变.一旦引用被初始化指向一个对象,就无法把它改为指 ...

  3. Extjs中加载异步树的最简单例子实现

    <!-- Author:Lovingshu&&Mr Samael Date:2012/06/25 Remark:Teach You How To Build A AsyncTre ...

  4. SEXTANTE中调用任意C++控制台程序的简单例子

    在sextante中单纯利用python或者调用sextante已有算法进行自定义开发,很多情况下速度不咋给力,同样的操作调用QGIS的C++插件比用sextante里的算法要快,有时候快的 还不止一 ...

  5. LabVIEW中的VISA函数串口通信的简单例子

    1.用VISA函数串口将数据读取并以数组的形式展示出来 前面板 程序 2.VISA函数串口数据读取与传出 前面板 程序

  6. C#中的String和string有什么区别?还有ref关键字怎么用?

    String 和 string 没有区别 string 是 String 的别名 ref 关键字一般只用于函数参数中,这个参数是 struct 类型,而不是 class 类型 因为 class 类型在 ...

  7. 【C#】C#中的ref、out关键字的应用与区别

    目录 01. 本文背景 02.ref的定义与使用 03.out的定义与使用 04.ref与out的区别 05.小结 01. 本文背景 原本我是一个地地道道的C/C++开发者,我其实很难想象有一天我会去 ...

  8. c#中使用ref和out传值

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

  9. .Net Core中使用ref和Spanamp;lt;Tamp;gt;提高程序性能

    一.前言 其实说到ref,很多同学对它已经有所了解,ref是C# 7.0的一个语言特性,它为开发人员提供了返回本地变量引用和值引用的机制. Span 也是建立在ref语法基础上的一个复杂的数据类型,在 ...

最新文章

  1. windows7与虚拟机fedora 9.0文件共享
  2. 慕课乐学python编程题_中国大学MOOC的APP(慕课)2020Python编程基础题目及答案
  3. 在JSP客户端限制表单重复提交
  4. python和php对比
  5. CF1305E Kuroni and the Score Distribution
  6. M. Monster Hunter(树形dp)
  7. java单例模式的实现方法_JAVA单例模式的几种实现方法
  8. ecshop每个商品添加去淘宝购买链接
  9. Mybatis注解配置与xml配置不能同时使用
  10. codeM 2018 资格赛
  11. springboot~让我习惯了TDD的开发模式
  12. php绘制甘特图,如何用excel做甘特图?甘特图制作方法图解
  13. ETL数据同步工具Kettle简介
  14. PowerShadow Master(影子系统)
  15. 蓝桥杯 18总决赛 A2 方阵阅兵(暴力)
  16. Ubuntu Dolphinscheduler 执行命令 source: 未找到
  17. 简单的个人介绍网页【附代码】
  18. docker安装shipyard
  19. UnityShader入门精要——运动模糊
  20. 手记---道可道,非常道

热门文章

  1. hdu2087 剪花布条 暴力/KMP
  2. hibernate中hibernate.hbm2ddl.auto配置讲解
  3. IOS,十六进制颜色和RGB颜色的宏定义
  4. modules not found(模块未找到)的解决方案
  5. 自己开发的Grid组件 针对IOS的
  6. spring中配置properties资源文件
  7. Cisco防火墙技术汇总[转贴]
  8. 带你简单了解通信工程
  9. 防止非法链接(referer)
  10. 博世发布7款传感器新品 从汽车到消费电子