Я работаю с ref
и не понимаю четко. Является ли это как указатель, как в C/С++, или как ссылка на С++? "
Почему я задал такой слабый вопрос, как вы думали на мгновение? Потому что, когда я читаю книги С#/. NET, msdn или разговариваю с разработчиками С#, меня путают по следующим причинам:
- Разработчики С# предлагают НЕ использовать
ref
в аргументах функции,e.g. ...(ref Type someObject)
не пахнет хорошо для них, и они предлагают...(Type someObject)
, я действительно не понимаю этого предложения. Причины, которые я слышал: лучше работать с копией объекта, а затем использовать его как возвращаемое значение, а не повреждать память по ссылке и т.д. Часто я слышу такое объяснение о объектах соединения с БД. Как на моем простом опыте на C/С++, я действительно не понимаю, почему использовать ссылку - это плохой материал на С#? Я управляю жизнью объекта и его распределениями памяти/перераспределениями и т.д.... Я читал в книгах и форумах только советыit bad, because you can corrupt your connection and cause a memory leak by a reference lose
, поэтому я контролирую жизнь объекта, я могу вручную управлять тем, что я действительно хочу, поэтому почему это плохо? - В настоящее время я читаю разные книги и разговариваю с разными людьми, я не понимаю, есть ли
ref
указатель (*
) или ссылка, как на С++, на&
? Как я помню, указатели в C/С++ всегда выделяют пространство с размеромvoid*
type - 4 байта (допустимый размер зависит от архитектуры), где размещается адрес структуры или переменной. В С++ путем передачи ссылки&
нет новых распределений из кучи/стека, и вы работаете с уже определенными объектами в пространстве памяти, и не существует вспомогательной выделенной памяти для указателя внешне, как на обычной C. Итак, чтоref
в С#? Поддерживает ли .NET VM его как указатель в простом C/С++, а егоGC
выделяет временное пространство для указателя или он работает как ссылка в С++? Работает лиref
только с управляемыми типами правильно или для типов значений типаbool, int
лучше переключить кодunsafe
и пройти через указатель в неуправляемом стиле?