C# 中ref和out的异同点

发布于:2021-12-06 04:22:50

C# 中ref和out的异同点:
简单概括:

相同点 :


ref和out 都是按引用传递

不同点 :


ref在调用前必须要初始化,在调用方法内不需要赋值.out在调用前不需要初始化,在调用方法内必须对其赋值.
举个例子,看看ref和out的相同点 :

这里有3个函数,区别在于参数的关键字不同.


然后创建3个变量a、b、c 全部赋值1, 分别调用3个不同函数.


从结果来看,a的值没有改变,而b和c都因为带有关键字传入引用而改变了值.


证明ref和out 都是按引用传递


然后修改一些细节,看看ref和out的不同点 :

让变量b初始不赋值,会产生编译错误,证明ref在调用前必须要初始化.


而使用out关键字的变量c,初始不赋值可以编译通过,证明out在调用前不需要初始化.


那么问题来了,C#是一种安全的高级程序设计语言,肯定不会出现允许打印未初始化的int值,那么是如何保证安全的呢?


现在把2个函数实现屏蔽掉,再看看编译情况 :


结果ref函数编译通过,out函数编译错误,因为out允许初始化不赋值,但是函数内必须赋值,从而保证C#的安全性,也证明了ref方法不需要赋值,out方法内必须对其赋值.


再修改一下两个函数内处理, 看看函数内使用传参的情况 :


ref函数允许直接将传参赋值给其他变量,而out函数则不行,同样也是因为out关键字允许传入未初始化参数.


调换一下执行顺序,编译就可以通过啦.

相关推荐

最新更新

猜你喜欢