У меня есть объект, который является моим в состоянии памяти программы, а также имеет некоторые другие рабочие функции, которые я передаю объекту для изменения состояния. Я передал его, обратившись к рабочим функциям. Однако я столкнулся со следующей функцией.
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, поэтому у меня проблема с получением указателей из головы.
Изменить: Похоже, что объекты на С# являются указателями на объект под капотом. Поэтому, когда вы передаете объект функции, вы можете изменить содержимое объекта через указатель, и единственное, что передается функции, - это указатель на объект, поэтому сам объект не копируется. Вы используете ref или out, если хотите, чтобы вы могли отключить или создать новый объект в функции, которая похожа на двойной указатель.