我有一个对象,它是程序的内存状态,还有一些其他的工作函数,我传递这个对象来修改状态。我已经通过引用将它传递给 worker 函数。但是我遇到了以下函数。
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。