![]() |
1
375
你应该使用
当需要将数据编组到另一个流程(可能成本高昂)时,这会产生很大的差异。因此,您希望避免在方法不使用初始值时对其进行封送处理。 除此之外,它还向声明或调用的读者显示初始值是相关的(并且可能被保留)还是丢弃的。 作为一个微小的区别,out参数不需要初始化。
举例
如果getbothnames是一种原子地检索两个值的方法,那么无论a和b是什么,该方法都不会更改行为。如果呼叫转到夏威夷的服务器,那么将初始值从这里复制到夏威夷将浪费带宽。使用ref的类似代码段:
可能会混淆读者,因为看起来a和b的初始值是相关的(尽管方法名会指示它们不是相关的)。
举例
这里的初始值与方法有关。 |
![]() |
2
71
使用out表示参数未被使用,仅设置。这有助于调用者理解您总是在初始化参数。 此外,ref和out不仅仅用于值类型。它们还允许您重置引用类型从方法中引用的对象。 |
![]() |
3
36
你说得对,从语义上讲,
另外,作为一个旁白,重要的是要注意,尽管引用类型和值类型在其值的性质上有所不同, 应用程序中的每个变量都指向存储值的内存位置 ,即使对于引用类型也是如此。碰巧,对于引用类型,该内存位置中包含的值是 另一个 内存位置。当您将值传递给函数(或执行任何其他变量赋值)时,该变量的值将被复制到另一个变量中。对于值类型,这意味着复制类型的整个内容。对于引用类型,这意味着将复制内存位置。不管怎样,它都会创建包含在变量中的数据的副本。它所具有的唯一真正相关性是处理赋值语义;当分配变量或传递值(默认值)时,当对原始(或新)变量进行新赋值时,它不会影响其他变量。对于引用类型,是的,对 实例 两边都有,但这是因为实际变量只是指向另一个内存位置的指针;变量的内容——内存位置——实际上并没有改变。
通过
|
![]() |
4
25
它取决于编译上下文(参见下面的示例)。
来自官方的msdn文档:
我们可以在分配参数时验证out和ref是否确实相同: CIL实例 : 考虑下面的例子
在CIL中,
NOP 没有手术, 低密度脂蛋白胆固醇 本地加载, STOLC 堆栈本地, 拉达格 :加载参数, B.S :分支到目标…. (见: List of CIL instructions ) |
![]() |
5
20
下面是我从这个代码项目文章中提取的一些注释 C# Out Vs Ref
如果你是一个有视觉效果的人,那么请看这段你的视频,这段视频实际上显示了不同之处。 https://www.youtube.com/watch?v=lYdcY5zulXA 下图更直观地显示了差异 |
![]() |
6
17
你需要使用
有一些语言机制可以帮助这些用例。
例如,
这是一个很明显的例子,您需要输出两个值:数值结果和转换是否成功。CLR的作者决定选择
为了
在C的下一个版本中,甚至可以在
|
![]() |
7
7
在方法体中,需要将
所以
哪里
|
![]() |
8
7
听起来如何:
|
![]() |
9
6
你可以使用
这个
尽管变量作为
虽然
但是,如果一个方法
属性不是变量,因此不能作为
有关传递数组的信息,请参见使用传递数组
你不能用
例子
声明一个
|
![]() |
10
5
只是为了澄清OP的评论,即在ref和out上的使用是“对方法外部声明的值类型或结构的引用”,该引用已经在错误中建立。 考虑在StringBuilder上使用ref,它是一种引用类型:
根据本协议:
|
![]() |
11
5
如何使用
你不能用
|
![]() |
12
4
作为引用传递的参数在传递给方法之前必须初始化,而out参数在传递给方法之前不需要初始化。 |
![]() |
13
4
让其他人知道,当变量从被调用的方法返回时,它将被初始化! 如上所述: “对于out参数, 调用方法必须在方法返回之前赋值 他说:“我想,我是一个很好的朋友。” 例子:
|
![]() |
14
4
基本上都
out关键字使参数通过引用传递。这类似于ref关键字,只是ref要求在传递变量之前对其进行初始化。
__ref_对于参考类型的用途是什么? 您可以将给定的引用更改为其他实例。 你知道吗?
|
![]() |
15
4
关于C 7的额外说明:
可以这样写:
|
|
Robert King · Unity C#语法问题-转换位置 1 年前 |
![]() |
JBryanB · 如何从基本抽象类访问类属性 1 年前 |
|
law · 检查答案按钮的输入字符串格式不正确 2 年前 |
![]() |
i_sniff_ket · 在unity之外使用unity类 2 年前 |