Поддержки C# оценивают типы и ссылочные типы, но являются ими всеми объекты?

В значительной степени необходимо сохранить левую сторону Вашего, где пункт убирает. Так, обычно, Вы сделали бы что-то как:

WHERE MyDateTime >= @activityDateMidnight 
      AND MyDateTime < (@activityDateMidnight + 1)

(Некоторые люди предпочитают DATEADD (d, 1, @activityDateMidnight) вместо этого - но это - то же самое).

таблица TimeZone усложняет ситуацию немного все же. Это немного неясно от Вашего отрывка, но это похоже на t. TheDateInTable находится в GMT с идентификатором Часового пояса, и что Вы тогда добавляете смещение для сравнения с @activityDateMidnight - который находится в местное время. Я не уверен что ds. LocalTimeZone, все же.

, Если это так, тогда необходимо получить @activityDateMidnight в GMT вместо этого.

5
задан pupeno 6 July 2009 в 13:43
поделиться

8 ответов

Вы хотите найти упаковку / распаковку.

Boxing

6
ответ дан 18 December 2019 в 05:40
поделиться

Все объекты Framework наследуются от System.Object (хотя в MSIL можно объявить тип, который этого не делает).

Объект object.ToString () метод является виртуальным методом.

Специальное правило для типов значений, которые пытаются вызвать метод из System.Object , следующее:

Если тип значения переопределил метод (как int и все числовые типы работают с ToString () ), тогда тип значения не упаковывается ("конвертируется" или "переносится" в объект), но метод реализации вызывается напрямую.

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

Что касается подробностей о упаковке / распаковке, здесь много информации в msdn.

3
ответ дан 18 December 2019 в 05:40
поделиться

Возможно, требуется больше понимания соглашения о вызовах объектно-ориентированного типа.

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

target.ToString ();

во что-то логически подобное:

ToString (target);

Таким образом, существует только одна копия кода функции (для каждого полиморфного экземпляра) и указатель объекта передается в при вызове метода.

1
ответ дан 18 December 2019 в 05:40
поделиться

Сравнение «Тип значения» и «Тип ссылки» ничего не говорит о том, является ли тип объектом или нет. Все, что он сообщает, - это семантика типа: такие вещи, как то, как он передается функциям, нужно ли вам использовать new для его создания и хранится ли он в стеке или куче. Даже последний - всего лишь деталь реализации .

1
ответ дан 18 December 2019 в 05:40
поделиться

Все типы (ссылка и значение) наследуются от Object. (Хотя, как и другие говорили, можно определить тот, который этого не делает, но не в C #, вы должны сделать это в MSIL)

Это означает, что любой тип значения по-прежнему будет наследовать методы от базового объекта. Чтобы тип значения вызывал метод для базового типа объекта, он должен быть сначала упакован, чтобы его можно было рассматривать как ссылочный тип (упаковка - это процесс принятия типа значения и помещения его в прямоугольник в форме ссылочного типа, чтобы он ведет себя как ссылочный тип). Однако в этом конкретном случае Int32 реализует свою собственную версию ToString (как и большинство распространенных типов числовых значений), которые являются обычными методами для самого типа значения, поэтому для его вызова не нужно помещать его в коробку.

Типы значений могут иметь методы и свойства, как и ссылочные типы. Ограничения состоят в том, что структуры (типы значений C #) не поддерживают наследование (кроме как от Object) или финализаторы.

Здесь есть хорошая статья о различиях между типами значений и ссылками .

3
ответ дан 18 December 2019 в 05:40
поделиться

Если age является типом значения, как это сделать? есть ли на нем метод ToString?

Типы значений могут иметь на себе методы. Почему бы и нет? Метод «по типу» - это просто кусок кода, который связан с определенным типом ; почему вы считаете, что имеет значение, классифицируется ли этот тип как «ссылочный тип» или «тип значения»?

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

Преобразуется ли он в объект ТОЛЬКО тогда, когда это требуется внутренне?

Что именно вы подразумеваете под «преобразованным в объект"? Вы имеете в виду "в коробке" ?

Есть много ситуаций, в которых тип значения должен быть заключен в рамку. Некоторые из них просты - например, когда вы приводите тип значения к объекту или интерфейсу. Некоторые из них неясны. (В общих методах бывают странные ситуации, когда мы должны упаковывать и распаковывать вещи способами, которых вы не ожидали.)

В этой конкретной ситуации упаковки нет. Вызов метода, непосредственно реализованного для типа значения, просто вызывает этот кусок кода. Нет необходимости рассматривать вещь как «объект»; кусок кода, который мы вызываем, знает тип вещи.

)

В данной конкретной ситуации бокса нет. Вызов метода, непосредственно реализованного для типа значения, просто вызывает этот кусок кода. Нет необходимости рассматривать вещь как «объект»; кусок кода, который мы вызываем, знает тип вещи.

)

В данной конкретной ситуации бокса нет. Вызов метода, непосредственно реализованного для типа значения, просто вызывает этот кусок кода. Нет необходимости рассматривать вещь как «объект»; кусок кода, который мы вызываем, знает тип вещи.

11
ответ дан 18 December 2019 в 05:40
поделиться

System.Int32 наследует System.ValueType ], который наследует System.Object .

Все типы классов, структур, перечислений, массивов, обнуляемых и делегированных типов в конечном итоге являются производными от объекта. Все типы интерфейса и типы параметров типа неявно преобразуются в объект.

6
ответ дан 18 December 2019 в 05:40
поделиться

все ответы в основном правильные, но я чувствую, что метод принадлежит system.object, а system.valuetype и system.Int32 являются производными от него. Поэтому, когда вы создадите его, он покажет методы базы класс.

0
ответ дан 18 December 2019 в 05:40
поделиться
Другие вопросы по тегам:

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