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