Базовый класс в данном случае это ValueType(отличие классов от структур - структуры наследуются от ValueType, классы от Object), и методы этого класса принимают первым параметром ValueType или Object(оба ссылочные. Поэтому для вызова метода базового типа структура упаковывается и передается неявным this. Но вообще наследование структур запрещено, так что наследование возможно только от ValueType'a.
Потому что они переопределяют методы базового типа, когда структура переопределяет метод базового типа, то его можно вызвать прямо без обращения к таблице виртуальных методов.
Чем плох enum в данном контексте и как обойти проблему излишних аллокаций при использовании enum'ов (https://habr.com/ru/post/343430/)
Проблема в том, что Enum не может переопределить методы базового класса (equals, gethashcode), насколько я понимаю, сложность в том, что Enum может описывать сколько угодно членов внутри себя, поэтому провести корректную реализацию методов в Equals и GetHashCode невозможно.
Как обойти: если необходимо сравнивать, то нужно использовать EqualityComparer.Default, он замыкается на вызов extern функции, таким образом мы заменим упаковку enum'a, на вызов виртуального метода Equals, класса EqualityComparer
Я выписал некоторые возможные ситуации, только при работе с decimal, происходит вызов метода, остальные операторы транслируются как в IL код , так и в байт код: