System.Object -> System.ValueType (знаковый — на стеке) — как это?
System.Object является базовым для System.ValueType потому, что C# скрывает от вам процесс boxing-а значений value-типов в ссылочные обертки.
Где выделяется память для ссылочных типов и типов-значений спецификацией не оговаривается (в текущих реализациях типы-значения иногда (!) выделяются на стеке, но могут быть и на куче, если являются членами ссылочных типов (массивы, другие классы, и т.д.). Для вас важно лишь знать логику поведения: как присваиваются и передаются в функции значения reference и value-типов, остальное - детали реализации.
Довольно важная для понимая статья: blogs.msdn.com/b/ericlippert/archive/2010/09/30/th...
Я не знаю, может быть с этим связаны какие-нибудь нюансы и подводные камни в производительности, или с ошибками в работе кода.
Как тогда создать свой знаковый тип, как указать это компилятору? Создать struct - и компилятор поймет, что тип делать знаковым?