Почему вызов непереопределенного метода структуры требует упаковки? ⇐ C#

Место общения программистов C#
Anonymous
Почему вызов непереопределенного метода структуры требует упаковки?

Сообщение Anonymous »

Согласно упаковке структур при вызове ToString(), вызов непереопределенного метода в структуре C# приводит к ее упаковке. В конечном итоге это связано с тем, как работает ограниченная IL-инструкция callvirt, которая, согласно документации, гласит:

If thisType является типом значения, и thisType не реализует метод, тогда ptr разыменовывается, упаковывается и передается как указатель this в инструкцию метода callvirt. p>

Однако это не объясняет, почему это так, особенно если структура реализует метод, она не упаковывает структуру:
Если thisType является типом значения, а thisType реализует метод, то ptr передается без изменений как указатель 'this' к инструкции вызова метода, для реализации метод по thisType.

Почему среда выполнения не может сделать то же самое, даже если метод не был реализован или переопределено структурой? Вероятно, это как-то связано с тем, как среда выполнения вызывает методы, но я не могу этого понять.

Подробнее здесь: https://stackoverflow.com/questions/791 ... ire-boxing

Вернуться в «C#»