我是 C#(我来自Java)的新手,我有以下疑问。
在课堂上我有这个方法的声明:
public List<DataModel.MaliciousCode.MaliciousSmall> getList(DataModel.MaliciousCode.MaliciousSmall model, out int totalRecords)
{
.............................................
.............................................
.............................................
}
我的疑问与参数列表中的 out 关键字有关。
阅读官方文档我明白这个参数是通过引用传递的(并且可能没有初始化)。
究竟是什么意思?这意味着在C#中我有指针吗?
答案 0 :(得分:5)
out
表示调用此方法时,会从方法中为参数totalRecords
分配一些值,并且该值可供调用者使用。
out parameter modifier (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
参数可能或许多未被初始化的原因。
答案 1 :(得分:0)
out int totalRecords
必须根据返回方法之前的类型分配给任何正确的值。
在调用此方法之前,甚至可以将totalRecords
分配给一个值(不鼓励),但是totalRecords
仍然必须在从方法中出来之前分配给一个值而其他变量不能做在将任何值分配给任何值之前对其进行任何值计算或操作,这与其他参数修饰符(例如ref
)不同。
对我来说,我可能会使用方法返回值作为方法过程的指示,并且out
变量对于必须从方法中产生的其他结果,但可以忽略方法范围之外的初始化值。使用out
请参阅this post的接受答案,显而易见的差异是&#34;您可以在指针上说 ++ ,但不在 a {{ 1}}或ref
。&#34;并且out
对指针非常关闭,但没有关闭。
当我们在C#中的ref,out和指针之间检查生成的CIL代码差异时,我们可以看到this。