Void - это Тип, но методы, которые возвращают void, ничего не помещают в стек. System.Void объявлен как структура, поэтому он также должен наследовать от объекта, но обрабатывается по-другому. Это станет более понятным, если вы посмотрите на код IL, после вызова метода, возвращающего void, нет инструкции pop
, которая обычно используется для удаления неиспользуемых возвращаемых значений из стека.
РЕДАКТИРОВАТЬ: На самом деле, я проверил. Если я объявляю метод как возвращающий System.Void, я получаю сообщение об ошибке, в котором говорится, что System.Void нельзя использовать из кода C #. Но попробуйте следующее:
typeof(object).IsAssignableFrom(typeof(void))
typeof(System.ValueType).IsAssignableFrom(typeof(void))
, который вернет true, поэтому void наследуется от объекта и System.ValueType (т.е. struct)