Мне любопытно узнать, приводят ли все преобразования в C # к боксу.
Нет.Только боксерские преобразования приводят к боксу, отсюда и название «боксерские преобразования».Боксовые преобразования - это все встроенные преобразования из типов значений в ссылочные типы - либо в класс, от которого наследуется тип значения, либо в интерфейс, который он реализует.(Или для интерфейса, совместимого с интерфейсом, который он реализует посредством ковариантного или контравариантного эталонного преобразования.)
- все ли преобразования являются дорогостоящей операцией?
Нет.Преобразования идентичности - нулевая стоимость, потому что компилятор может полностью их исключить.
Какова стоимость неявных и явных преобразований ссылок?
Неявные преобразования ссылок являются нулевой стоимостью.Компилятор может полностью исключить их.То есть, преобразование из Giraffe в его базовый тип Animal или Giraffe в его реализованный тип интерфейса IAmATallMammal осуществляется бесплатно.
Явные преобразования ссылок включают проверку времени выполнения для проверки того, что ссылка выполняется вфакт относится к объекту нужного типа.
Является ли эта проверка во время выполнения "дорогой" или нет, зависит от вашего бюджета.
Можно ли измерить эту стоимость должным образом?
Конечно.Решите, какой ресурс относится к вам - скажем, время - и затем тщательно измерьте потребление времени с помощью секундомера.
Вопрос, который вы не задавали, но, вероятно, должны иметь:
Какие самые дорогие преобразования?
Определяемые пользователем преобразования являются не более чем синтаксическим сахаром для вызова метода;этот метод может занять произвольно много времени, как и любой другой метод.
Динамические преобразования снова запускают компилятор во время выполнения;компилятору может потребоваться произвольно много времени для выполнения анализа типов, в зависимости от того, какую сложную задачу анализа вы выберете.