Задать вопрос
PragmaGames
@PragmaGames
Увлекаюсь Unity.

Как происходит приведение типов в C#?

Как под капотом компилятор приводит ссылочные типы друг к другу ? Есть базовый класс А, от него наследуются В и С.
В чем разница между :
(B)A
A is B
A as B
Я знаю, что первый вариант самый дорогой, по почему ? И почему апкастинг намного дешевле даункастинга ?
  • Вопрос задан
  • 293 просмотра
Подписаться 4 Средний Комментировать
Решения вопроса 1
@AndromedaStar
.Net - monkey
Погуглите, что такое Virtual Method Table.
Примерно так это и работает.
Короче типа с помощью приведения класса вы указываете из какого vtable брать методы по умолчанию, это если очень упрощенно.
Вот неплохой разбор:
https://www.msdr.ru/21/
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
При даункасте нужно сначала проверить, можно ли привести тип к нужному, и кинуть исключение, если нельзя.
Бросание исключений - дороже, чем просто вернуть false или null, как в случае с is/as.

А апкаст гарантированно всегда пройдёт, по тому он дешевле, чем даункаст - JIT просто убирает код, который отвечает за кидание исключений.
По тому в случае апкаста as T и (T) даёт одинаковый результат.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы