out关键字和ref关键字的区别
我们只需要知道一点,out经常用在多个参数的输出
ref用在数据的双向传递就好了
public string GetString()
{
return "Hello,World!";
}
var s=GetString();
这是一个简单输出string的方法,但是只输出了一个参数
我们输出两个参数或者多个参数也会用到枚举,元组,列表,数组
虽然枚举,元组,列表,数组能输出多个参数,但是它们要进行相应的转化和赋值
使用out就比较简单了
public void GetString(out int a,out int b)
{
a=1,b10;
}
int a,b;
GetString(out a,out b);
Console.WriteLine(a);
Console.WriteLine(b);
我们现在尝试同时使用ref和out写一个demo
public class RefDemo
{
public void UsageInt(ref int a, ref int b)
{
a = 1; b = 999;
}
public void UsageString(ref string a, ref string b)
{
a = "123";
b = "321";
}
}
public class OutDemo
{
public void UsageInt(out int a,out int b)
{
a = 1;b = 999;
}
public void UsageString(out string a,out string b)
{
a = "123";
b = "321";
}
}
public static void UsageOut()
{
OutDemo outDemo = new OutDemo();
int a, b;
outDemo.UsageInt(out a, out b);
Console.WriteLine(a);
Console.WriteLine(b);
Console.WriteLine("======================");
string a2, b2;
outDemo.UsageString(out a2, out b2);
Console.WriteLine(a2);
Console.WriteLine(b2);
}
public static void UsageRef()
{
RefDemo refDemo = new RefDemo();
int a=0, b=0;
refDemo.UsageInt(ref a, ref b);
Console.WriteLine(a);
Console.WriteLine(b);
Console.WriteLine("======================");
string a2="", b2="";
refDemo.UsageString(ref a2, ref b2);
Console.WriteLine(a2);
Console.WriteLine(b2);
}
输出结果
1
999
======================
123
321
从上面的demo可以看出,我们使用两个关键字除了最开始初始化不同,其他的结果都一样
其中out关键字可以看作ref的子集,out比ref关键字强大,因为它不需要初始化,
但是这是假相,没有很好的体现出ref的作用,我这里写这两个demo,是先让你们熟悉这两个关键字的用法
接下来我们看看两个关键字的区别
public static void Ref()
{
int number = 10;
Console.WriteLine("原始值: " + number);
ModifyNumberFromRef(ref number);
Console.WriteLine("修改后的值: " + number);
number = 100;
Console.WriteLine("再次修改原始值: " + number);
ModifyNumberFromRef(ref number);
Console.WriteLine("再次修改后的值: " + number);
}
static void ModifyNumberFromRef(ref int num)
{
num *= 2;
Console.WriteLine("在方法内部修改后的值: " + num);
}
public static void Out()
{
int number = 10;
Console.WriteLine("原始值: " + number);
ModifyNumberFromOut(out number);
Console.WriteLine("修改后的值: " + number);
number = 100;
Console.WriteLine("再次修改原始值: " + number);
ModifyNumberFromOut(out number);
Console.WriteLine("再次修改后的值: " + number);
}
static void ModifyNumberFromOut(out int num)
{
num= 100;
num *= 2;
Console.WriteLine("在方法内部修改后的值: " + num);
}
输出结果
原始值: 10
在方法内部修改后的值: 20
修改后的值: 20
再次修改原始值: 100
在方法内部修改后的值: 200
再次修改后的值: 200
-------------------------
原始值: 10
在方法内部修改后的值: 200
修改后的值: 200
再次修改原始值: 100
在方法内部修改后的值: 200
再次修改后的值: 200
通过输出我们可以很明显看出两个关键字的区别
本文作者:孤沉
本文链接:https://www.cnblogs.com/guchen33/p/18438727
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步