当前位置:
首页 > Python基础教程 >
-
C#教程之C# ref out 关键字
C# 的数据类型有两种:
一种是值类型(value type),一种是引用类型(reference type)。
值类型包括:结构体(数值类型,bool,用户自定义结构体)、枚举和可空类型。
引用类型包括:数组,用户定义的类、接口、委托,object,字符串。
值类型和引用类型的区别在于:函数参数传递的时候,值类型把自已的值复制一份传递给别的函数操作,也就是说无论函数的值怎么改变,其本身的值都不会受到影响。而引用类型则是把自己的地址传递给别的函数,操作的是他本身的值,所以当传递的值改变时,其本身的值也跟着改变。
public static void ValueMethod(int i) { i++; }
public static void RefMethod(ref int i) { i++; }
public static int OutMethod(out int i) { i = 0; i++; return i; }
static void Main(string[] args)
{
int i = 0;
ValueMethod(i);
Console.WriteLine("i: "+i); //i: 0
int j = 0;
RefMethod(ref j);
Console.WriteLine("j: " + j); //j: 1
int k = 0;
Console.WriteLine("k: " + OutMethod(out k)); //k: 1
}
如上例所示:
- 在按值传递的情况下,i的值没有发生变化。
- 在按引用传递的情况下,j的值递增,变成了计算之后的结果,同时需要在使用的时候显示写明ref关键字(不仅在方法定义时,在使用方法时也需要注明ref)
- 使用out关键字,out后面的参数需要在方法内部赋值,不需要在使用方法的时候传值,只要标明关键字out即可。
字符串是一种特殊的引用类型变量:
static void Main(string[] args)
{
StringBuilder sb = new StringBuilder("1");
test(sb);
Console.WriteLine(sb.ToString());
}
static void test(StringBuilder sb)
{
sb.Append("2");
}
结果sb变成了12.
(上面例子如果我们在sb前面增加ref关键字,结果是一样的)
不过,如果我们只定义一个string a = "123",上面的方法是不能通过的,因为string是一种“不可变引用类型”。
栏目列表
最新更新
nodejs爬虫
Python正则表达式完全指南
爬取豆瓣Top250图书数据
shp 地图文件批量添加字段
爬虫小试牛刀(爬取学校通知公告)
【python基础】函数-初识函数
【python基础】函数-返回值
HTTP请求:requests模块基础使用必知必会
Python初学者友好丨详解参数传递类型
如何有效管理爬虫流量?
SQL SERVER中递归
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
这是目前我见过最好的跨域解决方案!
减少回流与重绘
减少回流与重绘
如何使用KrpanoToolJS在浏览器切图
performance.now() 与 Date.now() 对比
一款纯 JS 实现的轻量化图片编辑器
关于开发 VS Code 插件遇到的 workbench.scm.
前端设计模式——观察者模式
前端设计模式——中介者模式
创建型-原型模式