gpt4 book ai didi

c# - Ref 和 OUT 幕后

转载 作者:太空宇宙 更新时间:2023-11-03 22:46:21 28 4
gpt4 key购买 nike

我想知道 ref 和 out 关键字在幕后是如何工作的?例如,如果我们在方法上使用它,它会把这个值类型变量放入某个类中以便像使用引用类型一样使用它吗?

最佳答案

in order to work with it as with reference type?

首先,您需要了解“通过引用”(ref/out 和现在的in)是不一样的thing 作为“引用类型”。

最终,当您看到:

void SomeMethod(ref int x);

这里 x 是一个引用,也就是指向一个值的“托管指针”;来电者提供引用。所以,当你有:

int a = 123;
SomeMethod(ref a);

这通过获取变量 a 的地址(通常通过 ldlocaldflda IL 指令)并传递那个 地址作为参数值。

如果 SomeMethod 的主体是:

void SomeMethod(ref int x) {
Write(x);
x = 12;
}

然后 Write(x) 取消引用 指针 x - 它加载 x 的值,看起来在它指向的地方,从那里得到一个实际值。同样,x=12 取值 12,查看指针 x 并将 12 写入 无论指针指向何处

用 C# 指针(又名“非托管指针”)在 unsafe C# 中编写等价物以显示差异:

void SomeMethod(int* x) {
Write(*x);
*x = 12;
}
int a = 123;
SomeMethod(&a);

out 只是一个奇特的 ref 版本,具有某些“明确赋值”约定; in 同样是 ref 的奇特版本,它允许 readonly 类型可靠高效地工作,同时避免堆栈复制。

关于c# - Ref 和 OUT 幕后,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49748728/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com