Почему var инициализируется с номером, установленным в Int32 [duplicate]

Я думаю, что все начинается с определения LSP (Принцип замещения Лискова), который climes:

, если q (x) - свойство, доказуемое об объектах x типа T, то q ( y) должно быть истинным для объектов y типа S, где S является подтипом T.

Но типы значений, например int, не могут быть заменены object в C#. Доказательство очень просто:

int myInt = new int();
object obj1 = myInt ;
object obj2 = myInt ;
return ReferenceEquals(obj1, obj2);

Это возвращает false, даже если мы назначим ту же «ссылку» на объект.

10
задан Community 23 May 2017 в 11:45
поделиться

2 ответа

На самом деле, что вы спрашиваете: какой тип задан для целочисленных литералов в C # ?, к которому ответ можно найти в спецификации:

(раздел 2.4.4.2 спецификации 4.0)

Тип целочисленного литерала определяется следующим образом:

  • Если литерал не имеет суффикса, он имеет первый из этих типов, в котором его значение может быть представленным: int, uint, long, ulong.
  • Если литеральный суффикс U или u, он имеет первый из этих типов, в котором его значение может быть представлено: uint, ulong.
  • Если литерал суффикс L или l, он имеет первый из этих типов, в котором его значение может быть представлено: long, ulong.
  • Если литерал суффикс UL, Ul, uL, ul, LU, Lu, lU или lu, имеет тип ulong.

Если значение, представленное целым литералом, выходит за пределы диапазона типа ulong, возникает ошибка времени.

28
ответ дан AakashM 15 August 2018 в 16:50
поделиться
  • 1
    Спасибо. Вы ответили очень описательно и полезны. – MyCodeSucks 19 October 2012 в 15:35

Все целые литералы имеют тип int, поэтому ваша переменная будет int, если вы не добавите или не добавите явный тип классификатора в конце:

var quick = 65535;         // int
var brown = (ushort)65535; // ushort
var fox = 65535L;          // long
6
ответ дан dasblinkenlight 15 August 2018 в 16:50
поделиться
  • 1
    Спасибо. Вы ответили очень полезно. – MyCodeSucks 19 October 2012 в 15:35
  • 2
    unsigned не работает в C #. Я думаю, вы хотели использовать ushort. – svick 19 October 2012 в 17:53
Другие вопросы по тегам:

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