使用C#中的ref关键字,用2个简单例子来说明
在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个简单例子来说明相关推荐
- 如何用java语言实现C#中的ref关键字(按引用传递参数)的效果
https://www.cnblogs.com/nnngu/p/8300164.html 转载于:https://www.cnblogs.com/cnki/p/10409684.html
- java+中的final关键字有哪些用法_Java中的Final关键字用法汇总及简单示例
可能使用到final的情况有3种:数据.方法和类. 一.final数据 对于基本类型,final使数值恒定不变:而对于对象引用,final使引用恒定不变.一旦引用被初始化指向一个对象,就无法把它改为指 ...
- Extjs中加载异步树的最简单例子实现
<!-- Author:Lovingshu&&Mr Samael Date:2012/06/25 Remark:Teach You How To Build A AsyncTre ...
- SEXTANTE中调用任意C++控制台程序的简单例子
在sextante中单纯利用python或者调用sextante已有算法进行自定义开发,很多情况下速度不咋给力,同样的操作调用QGIS的C++插件比用sextante里的算法要快,有时候快的 还不止一 ...
- LabVIEW中的VISA函数串口通信的简单例子
1.用VISA函数串口将数据读取并以数组的形式展示出来 前面板 程序 2.VISA函数串口数据读取与传出 前面板 程序
- C#中的String和string有什么区别?还有ref关键字怎么用?
String 和 string 没有区别 string 是 String 的别名 ref 关键字一般只用于函数参数中,这个参数是 struct 类型,而不是 class 类型 因为 class 类型在 ...
- 【C#】C#中的ref、out关键字的应用与区别
目录 01. 本文背景 02.ref的定义与使用 03.out的定义与使用 04.ref与out的区别 05.小结 01. 本文背景 原本我是一个地地道道的C/C++开发者,我其实很难想象有一天我会去 ...
- c#中使用ref和out传值
c#中使用ref和out传值 首先,如果不使用这两个关键字,那是什么样 呢? 看下面的例子: 使用ref: using System; class Test { static void Swap(re ...
- .Net Core中使用ref和Spanamp;lt;Tamp;gt;提高程序性能
一.前言 其实说到ref,很多同学对它已经有所了解,ref是C# 7.0的一个语言特性,它为开发人员提供了返回本地变量引用和值引用的机制. Span 也是建立在ref语法基础上的一个复杂的数据类型,在 ...
最新文章
- windows7与虚拟机fedora 9.0文件共享
- 慕课乐学python编程题_中国大学MOOC的APP(慕课)2020Python编程基础题目及答案
- 在JSP客户端限制表单重复提交
- python和php对比
- CF1305E Kuroni and the Score Distribution
- M. Monster Hunter(树形dp)
- java单例模式的实现方法_JAVA单例模式的几种实现方法
- ecshop每个商品添加去淘宝购买链接
- Mybatis注解配置与xml配置不能同时使用
- codeM 2018 资格赛
- springboot~让我习惯了TDD的开发模式
- php绘制甘特图,如何用excel做甘特图?甘特图制作方法图解
- ETL数据同步工具Kettle简介
- PowerShadow Master(影子系统)
- 蓝桥杯 18总决赛 A2 方阵阅兵(暴力)
- Ubuntu Dolphinscheduler 执行命令 source: 未找到
- 简单的个人介绍网页【附代码】
- docker安装shipyard
- UnityShader入门精要——运动模糊
- 手记---道可道,非常道