ref与out
一、 ref
下面的代码主要是说了这么个事,有引用类型(数组 int[] ints)和值类型(int i) ,这两个有相同的初始值都是0 。通过方法对这两个进行修改,
输出之后数组值是100,整型还是0。
继续看······
1 class Program
2 {
3 static void founction(int[] ints, int i)//定义方法,通过数组传值和通过整型传值(就是一个引用传值和一个值传参)
4 {
5 ints[0] = 100;//方法里,对引用进行修改。
6 i = 100; //对整型进行修改。
7 }
8
9
10
11
12 public static int Main()
13 {
14 int i = 0;
15 int[] ints = { 0, 1, 2, 3, 4 };
16
17 //输出原始数据
18 Console.WriteLine("数组引用原始数据:"+ints[0]);// ints[0]=0
19 Console.WriteLine("值类型原始数据:"+i); // int i = 0
20 Console.WriteLine("*******************************************");
21
22
23 //调用方法进行传参
24 founction(ints, i);
25
26
27 //输出传参之后的改变数据
28
29 Console.WriteLine("数组引用原始数据:" + ints[0]);// ints[0]=100
30 Console.WriteLine("值类型原始数据:" + i); // int i = 0
31 Console.ReadLine();
32 return 0;
33
34 }
35 }
** 上面的代码很简单,可是我们通过上面知道了。值类型传参对其进行修改是无效的,而引用类型是可以的。我们想让值类型传参拥有引用类型传参的效果,
就是可以对其修改,对初值产生影响。那我们就加上ref关键字。就在方法传值处加上 ref。
修改如下:
static void founction(int[] ints, ref int i)//使其值类型拥有引用类型的效果
{
ints[0] = 100;
i = 100; //这样使 在方法中,对值类型修改的值可以对初值产生影响。 i=100 啦
}
**当然要一一对应啦,调用方法中也应该一一对应,修改为:
founction(int[] ints, ref int i)//
总结:(1)ref关键字,迫使值类型通过引用来传递。
(2)在方法中注明ref,同事调用是也应该参数一致。
二、out
说明: 你不想让值类型有初值。不想引起混乱。
看下面代码···
class Program
{
static void founction( out int i )
{
i = 100;
}
public static int Main()
{
int i; //加了out,就可以不对值类型进行初始化了。
founction(ints, out i);
Console.WriteLine("值类型数据:" + i); // int i = 100
Console.ReadLine();
return 0;
}
}
总结:out ,可以让你吐槽,允许可以不对值类型初始化,即使你初始化了,加了out,也会对其忽略,值保留修改后的值。
本人菜鸟,请指点···谢谢···
更多精彩原创心得,请关注微信公众号: 梯形

【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?