@nevro
не пойми кто

System.Object -> System.ValueType (знаковый — на стеке) — как это?

1. System.Object - не стековый и не ссылочный, пустой класс с набором виртуальных методов, только для единообразия доступа в его наследники?
2. Реализация стековых классов-типов - на низком уровне (с использованием стековых регистров процессора), а реализация ссылочных - только через new?
  • Вопрос задан
  • 1283 просмотра
Решения вопроса 1
Nipheris
@Nipheris Куратор тега C#
System.Object является базовым для System.ValueType потому, что C# скрывает от вам процесс boxing-а значений value-типов в ссылочные обертки.
Где выделяется память для ссылочных типов и типов-значений спецификацией не оговаривается (в текущих реализациях типы-значения иногда (!) выделяются на стеке, но могут быть и на куче, если являются членами ссылочных типов (массивы, другие классы, и т.д.). Для вас важно лишь знать логику поведения: как присваиваются и передаются в функции значения reference и value-типов, остальное - детали реализации.

Довольно важная для понимая статья: blogs.msdn.com/b/ericlippert/archive/2010/09/30/th...
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
yarosroman
@yarosroman Куратор тега C#
C# the best
1. System.Object как раз ссылочный тип, это базовый тип для всех классов, struct - это значимый тип (а не стековый). Для ссылочных память выделяется в куче, а для значимых в стеке потока.
2. зачем вам знать, что там на низком уровне, тем более сначала будет компиляция в IL код, а там уже сам JIT решит как ему быть.

https://msdn.microsoft.com/ru-ru/library/4d43ts61(v=vs.90).aspx
habrahabr.ru/sandbox/68552
Ответ написан
Комментировать
Странно у вас. Книгу почитайте.
DateTime тоже через new, но это значимый тип.
Стековых регистров не бывает. (я не слышал)
System.Object - ссылочный тип.
Интересные заметки по C# и CLR
Интересные заметки по C# и CLR (v2.0)
ITVDN
Ответ написан
Комментировать
@nevro Автор вопроса
не пойми кто
Я не знаю, может быть с этим связаны какие-нибудь нюансы и подводные камни в производительности, или с ошибками в работе кода.
Как тогда создать свой знаковый тип, как указать это компилятору? Создать struct - и компилятор поймет, что тип делать знаковым?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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