C#中ref关键字的用法
作者:Darren?Ji 发布时间:2022-07-17 21:30:47
标签:C#,ref,关键字
在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
来源:https://www.cnblogs.com/darrenji/p/3821313.html


猜你喜欢
- 前言我们在日常开发中,经常会用到一个系统需要链接多个数据库来实现业务的需求,比如多个系统之间数据调用、两个数据之间同步等等。今天给大家分享使
- @PropertySource读取配置文件通过@Value参数注入有参数文件如下test.propertiesproject.author=
- 这篇文章主要介绍了springboot如何使用AOP做访问请求日志,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价
- 调整数组顺序使奇数位于偶数之前1. 题目描述输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的
- 什么是ServletContext?根据字面意思即Servlet上下文服务器会为每一个工程创建一个对象,这个对象就是ServletConte
- 本文实例为大家分享了android九宫格可分页加载控件的具体实现代码,供大家参考,具体内容如下github地址基本思路是viewpager+
- 什么是 Intent ?Intent是Android开发中一个非常重要且常用的类,Intent是一个消息传递对象,可以用来从其他应用组件请求
- 说明:之前在网上到处搜寻类似的旋转效果 但搜到的结果都不是十分满意 原因不多追述(如果有人找到过相关 比较好的效果 可以发一下连接 一起共同
- 1、什么是 IOC?IOC-Inversion of Control,即控制反转。它不是什么技术,而是一种设计思想。传统的创建对象的方法是直
- 引言在实际的Android项目开发中,图片是必不可少的元素,几乎所有的界面都是由图片构成的;像列表页、查看大图页等,都是需要展示图片,而且这
- 首先,我们看看Map架构。如上图:Map 是映射接口,Map中存储的内容是键值对(key-value)。AbstractMap 是继承于Ma
- 在C# winform 应用程序中,对于键盘响应事件,经常使用到"KeyPress"、“KeyUp”、"Key
- 一、类成员的访问级别public:可由任何代码访问。private(默认):只能由类中的代码访问。internal:只能由它所在的项目(程序
- 声明一个可变数量的参数: Static int Add(params int[] values) { int sum = 0; if(val
- 1、MediaCodec调用流程首先,我们先看下MediaCodec::CreateByType函数里面做了什么:sp<MediaCo
- 在前一期中,我们做了悬浮头部的两个tab切换和下拉刷新效果,后来项目中要求改成三个tab,当时就能估量了一下,如果从之前的改,也不是不可以,
- springboot和vue结合的方案网络上的主要有以下两种:1. 【不推荐】在html中直接使用script标签引入vue和一些常用的组件
- Android 自定义按钮点击事件和长按事件对比一个按钮同时实现点击和长按事件,有时候会有冲突,我们针对这一现象来自定义按钮来区
- 我们从jdk8说起。主要是四个随机数生成器。神马?有四个?接下来我们简单说下这几个类的使用场景,来了解其中的细微差别,和api设计者的良苦用
- 在Java里面,可以用复制语句”A=B”给基本类型的数