Когда использовать касательно и когда это не необходимо в C#

С 2018 года существует гораздо более короткое и элегантное решение. Просто используйте. Array.prototype.sort () .

Пример:

var items = [
  { name: 'Edward', value: 21 },
  { name: 'Sharpe', value: 37 },
  { name: 'And', value: 45 },
  { name: 'The', value: -12 },
  { name: 'Magnetic', value: 13 },
  { name: 'Zeros', value: 37 }
];

// sort by value
items.sort(function (a, b) {
  return a.value - b.value;
});

100
задан Rex Logan 11 March 2009 в 19:41
поделиться

5 ответов

Короткий ответ: считайте мой статья о передаче параметров .

ответ Long: когда параметр ссылочного типа передается значением, только ссылка передается, не копия объекта. Это похоже на передачу указателя (значением) в C или C++. Изменения в значении самого параметра не будут замечены вызывающей стороной, но изменениями в объекте, который контрольные точки к будут быть замеченными.

, Когда параметр (любого вида) передается ссылка, которая означает, что любые изменения в параметре замечены вызывающей стороной - изменения в параметре изменения в переменной.

статья объясняет все это более подробно, конечно:)

Полезный ответ: Вы почти никогда не должны использовать касательно / [1 112]. Это - в основном способ получить другое возвращаемое значение и должно обычно избегаться точно, потому что это означает метод, вероятно, пытающийся сделать слишком много. Это не всегда имеет место (TryParse, и т.д. канонические примеры разумного использования out), но использующий касательно / должна быть относительная редкость.

207
ответ дан Jon Skeet 5 November 2019 в 11:52
поделиться

Думайте некасательно параметра, как являющегося указателем, и касательно параметра как двойной указатель. Это помогло мне больше всего.

Вы почти никогда не должны проходить мимо значений касательно, Я подозреваю, что, если бы это не было для проблем interop, команда .NET никогда не включала бы его в исходную спецификацию. OO способ иметь дело с большей частью проблемы, которые касательно параметров решают, к:

Для нескольких возвращаемых значений

  • Создают структуры, которые представляют несколько возвращаемых значений

Для примитивов, которые изменяются в методе как результат вызова метода (метод имеет побочные эффекты на примитивных параметрах)

  • Реализация метод в объекте как метод экземпляра, и управляйте состоянием объекта (не параметры) как часть вызова метода
  • Использование несколько решение для возвращаемого значения и объединитесь, возвращаемые значения к Вашему состоянию
  • Создают объект, который содержит состояние, которым может управлять метод и передать тот объект как параметр а не сами примитивы.
26
ответ дан Michael Meadows 5 November 2019 в 11:52
поделиться

Вы могли, вероятно, записать все приложение C# и никогда не проходить мимо никаких объектов/структур касательно

, у меня был преподаватель, который сказал мне это:

единственное место Вы использовали бы судей, то, где Вы также:

  1. Хочу передать большой объект (т.е., объекты/структура имеют объекты/структуры в нем к нескольким уровням), и копирование его было бы дорогим, и
  2. Вы называете Платформу, Windows API или другой API, который требует его.

не делают этого просто, потому что Вы можете. Можно получить бит в заднице некоторыми противными ошибками, если Вы начинаете изменять значения в параметрическом усилителе и не обращаете внимание.

я соглашаюсь с его советом, и в моих пяти плюс годы начиная со школы, у меня никогда не было потребности в нем за пределами вызова Платформы или Windows API.

9
ответ дан sdgfsdh 5 November 2019 в 11:52
поделиться

Так как received_s является массивом, Вы передаете указатель на тот массив. Функция управляет теми существующими данными на месте, не изменяя базовое местоположение или указатель. Касательно ключевого слова показывает, что Вы передаете фактический указатель на местоположение и обновляете тот указатель во внешней функции, таким образом, значение во внешней функции изменится.

, Например, массив байтов указатель на ту же память, прежде чем и после, память была просто обновлена.

ссылка Конечной точки на самом деле обновляет указатель на Конечную точку во внешней функции к новому экземпляру, сгенерированному в функции.

3
ответ дан Chris Hynes 5 November 2019 в 11:52
поделиться

Думайте касательно как значение, что Вы передаете указатель ссылкой. Не используя касательно средств Вы передаете указатель значением.

Еще лучше, проигнорируйте то, что я просто сказал (это, вероятно, вводит в заблуждение, особенно с типами значения), и читайте страница .

This MSDN
3
ответ дан Brian 5 November 2019 в 11:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: