【发布时间】:2016-06-06 09:43:46
【问题描述】:
我有一个对象,它是程序的内存状态,还有一些其他工作函数,我将对象传递给它以修改状态。我一直通过 ref 将它传递给工作函数。但是我遇到了以下功能。
byte[] received_s = new byte[2048];
IPEndPoint tmpIpEndPoint = new IPEndPoint(IPAddress.Any, UdpPort_msg);
EndPoint remoteEP = (tmpIpEndPoint);
int sz = soUdp_msg.ReceiveFrom(received_s, ref remoteEP);
这让我很困惑,因为 received_s 和 remoteEP 都从函数返回内容。为什么remoteEP 需要ref 而received_s 不需要?
我也是一名 c 程序员,所以我无法从脑海中获取指针。
编辑: 看起来 C# 中的对象是指向底层对象的指针。因此,当您将对象传递给函数时,您可以通过指针修改对象内容,并且传递给函数的唯一内容是指向对象的指针,因此不会复制对象本身。如果您希望能够在函数中切换或创建一个新对象,就像双指针一样,您可以使用 ref 或 out 。
【问题讨论】: