gpt4 book ai didi

c# - C# ref 的技术含义

转载 作者:行者123 更新时间:2023-11-30 23:18:35 26 4
gpt4 key购买 nike

我知道 c# ref 允许您发送指向对象的指针。我只是想知道这对于实际发送到引擎盖下的函数意味着什么。

据我了解是这样的:

DoSomething(引用示例对象)--> 这里将指向 exampleObject 的指针发送给函数

DoSomething(示例对象)--> 这里指向对象属性的指针数组被发送到函数。

这是正确的吗?第二个函数是否也会为值类型创建一个指针? (鉴于它们是属性,它们的值必须保存在堆上以保持对象的引用完整性)

更清楚一点的解释:*对象 A 在内存位置 5*它有属性对象B和对象C

现在我调用 DoSomething (A)--> 因为默认情况下对象是通过指针处理的,所以我传递了一个指针值 5,这样我就可以操作内存地址 5 处的值。C# 如何知道所发送对象的属性位于哪个内存地址?

现在我调用 DoSomething(引用 A)--> 此时我创建了一个指向另一个指针的新指针(比方说 6)。所以现在我传入 6,这允许我更改内存地址 6 的值,它很方便地变成 5,即对象 A 的位置。所以现在我可以更改传入的 A 对象指向的内存.

我不明白的是如何在内存中找到属性?必须将指针数组或指向指针数组的指针发送到某处,对吗?

最佳答案

我对第二种情况的理解

 DoSomething(exampleObject)

exampleObject 的地址作为方法 DoSomething 的参数给出,这意味着在 DoSomething 中可以重新分配对象的属性(假设使用了引用类型),但是 exampleObject 的赋值不会在调用者的范围内改变它,因为 exampleObject 的地址是在堆栈上修改的,而不是在调用者的范围。另一方面,在第一种情况下

DoSomething(ref exampleObject)

指向 exampleObject 的地址的指针作为 DoSomething 的参数给出,这意味着除了更改 exampleObject 的属性外,可以重新分配对 exampleObject 本身的引用。因此,exampleObject 可以被交换,这种效果在调用者的范围内也是可见的。

关于c# - C# ref 的技术含义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40791636/

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