对方法参数前面的out关键字有疑问
本文关键字:out 关键字 有疑问 前面 方法 参数 | 更新日期: 2023-09-27 17:49:34
我对 c#很陌生(我来自Java),我有以下疑问
在一个类中我有这个方法的声明:
public List<DataModel.MaliciousCode.MaliciousSmall> getList(DataModel.MaliciousCode.MaliciousSmall model, out int totalRecords)
{
.............................................
.............................................
.............................................
}
我的疑问与参数列表中的out关键字有关。
阅读官方文档,我明白这个参数是通过引用传递的(并且它可以不初始化)。
到底是什么意思?这意味着在c#中我有指针?
out
意味着当这个方法被调用时,参数totalRecords
将从方法中分配一些值,并且该值将可供调用者使用。
out参数修饰符(c# Reference)
例如,如果你像这样调用你的方法:out关键字导致参数通过引用传递。这是与ref关键字类似,只是ref要求变量为在传递之前初始化。若要使用out参数,则方法定义和调用方法必须显式地使用out字。
int totalRecords; //just declaration no initialization
var list = getList(new MaliciousSmall(), out totalRecords);
Console.WriteLine(totalRecords);// value from method.
在方法调用结束时,totalRecords
将在方法内部被赋值。getList
方法必须给totalRecords
赋值/初始化一些值。如果在方法中未为其赋任何值,则会发生编译时错误。这就是为什么out
参数在使用方法调用之前可能或许多没有初始化的原因。
在你的方法中,out int totalRecords
必须在方法返回之前根据它的类型被赋给任何正确的值。
即使totalRecords
可能在调用该方法之前被赋值(不鼓励),但是totalRecords
仍然必须在它从方法中出来之前被赋值,并且其他变量在被赋值之前不能对其进行任何值计算或操作,这与其他参数修饰符如ref
不同。
对于我来说,我可能会使用方法返回值作为方法进程的指示,并且out
变量上的其他结果必须从方法中出来,但方法范围之外的初始化值可以忽略。使用out
参考这篇文章的接受答案,明显的区别是"你可以在指针上说++,但不能在上说ref
或out
."和ref
非常接近指针但不能。。
当我们检查c#中ref, out和指针之间的生成的CIL代码差异时,我们可以看到这个