-
C#教程之C#教程之C# ref out 关键字
本站最新发布 C#从入门到精通
试听地址 https://www.xin3721.com/eschool/CSharpxin3721/
试听地址 https://www.xin3721.com/eschool/CSharpxin3721/
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是一种“不可变引用类型”。
栏目列表
最新更新
C# 数据操作系列 - 17 Dapper ——号称可以与
C# 数据操作系列 - 18 让Dapper更强的插件
C#编码转换
python list遍历方法汇总
将Python分成7个阶段学习,你会发现学习
Python中的单例模式如何正确运用?本文详
使用Python爬虫的方式把自己喜欢的音乐的
pandas.cut使用总结
Python之Selenium如何正确运用?案例详解
Python爬虫是如何遍历文档树呢?一招教你
基于UDP的服务器端和客户端
再谈UDP和TCP
在socket编程中使用域名
网络数据传输时的大小端问题
socket编程实现文件传输功能
如何优雅地断开TCP连接?
图解TCP四次握手断开连接
详细分析TCP数据的传输过程
图解TCP数据报结构以及三次握手(非常详
TCP协议的粘包问题(数据的无边界性)
SqlServer 利用游标批量更新数据
BOS只读状态修改
SQL Server等待事件—PAGEIOLATCH_EX
数据库多行转换为单一列
获取数据表最后最后访问,修改,更新,
计算经历的时间
SQL查询结果自定义排序
修改数据库默认位置
日期简单加或减
从日期获取年,月或日