Массивы или списки передаются по умолчанию ссылкой в c#?

Как уже говорили другие, временные метки могут представлять меньший диапазон времени (с 1970 по 2038 год). Однако временные метки измеряют количество секунд, прошедших с начала эпохи Unix (1970-01-01 00:00:00 UTC), что делает их независимыми от часового пояса, тогда как DATETIME сохраняет дату и время без часового пояса. Другими словами, временные метки однозначно ссылаются на конкретный момент времени, тогда как для точного момента времени, на который ссылается DATETIME, требуется часовой пояс (который не сохраняется в поле DATETIME). Чтобы понять, почему это может иметь значение, подумайте, что произойдет, если мы изменим наш часовой пояс.

Допустим, мы хотим сохранить дату и время 2010-03-27 12:00 UTC. Если мы сохраняем это и извлекаем его, используя временную метку или DATETIME, то, как правило, нет никакой разницы. Однако, если сервер теперь изменяется так, что местным часовым поясом является UTC + 01, тогда мы получим два разных результата, если извлечем дату и время.

Если бы мы установили поле в DATETIME, оно сообщило бы дату и время как 2010-03-27 12:00, несмотря на изменение часового пояса. Если бы мы установили в поле метку времени, дата была бы сообщена как 2010-03-27 11:00. Это не проблема ни с одним типом данных, это просто результат того, что они хранят немного другую информацию.

75
задан Jorge Branco 8 June 2009 в 22:45
поделиться

3 ответа

Ссылка передается по значению .

Массивы в .NET являются объектами в куче, поэтому у вас есть ссылка. Эта ссылка передается по значению, что означает, что изменения в содержимом массива будут видны вызывающему, но переназначить массив не будет:

void Foo(int[] data) {
    data[0] = 1; // caller sees this
}
void Bar(int[] data) {
    data = new int[20]; // but not this
}

Если вы добавите Модификатор ref , ссылка передается по ссылке - и вызывающий абонент увидит любое изменение выше.

193
ответ дан 24 November 2019 в 11:30
поделиться

Да, в C # по умолчанию они передаются по ссылке. Все объекты в C #, кроме типов значений. Чтобы быть немного более точным, они передаются «по ссылке по значению»; то есть значение переменной, которое вы видите в своих методах, является ссылкой на исходный переданный объект. Это небольшой смысловой момент, но он иногда может быть важным.

-1
ответ дан 24 November 2019 в 11:30
поделиться

Они передаются по значению (как и все параметры, которые не являются ни ref, ни out), но значение является ссылкой на объект, поэтому они эффективно передаются ссылка.

8
ответ дан 24 November 2019 в 11:30
поделиться
Другие вопросы по тегам:

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