Существует две стоимости:
- Стоимость копирования ссылки в другое место.Это очевидно минимально:)
- Потенциальная стоимость выполнения подлинно виртуальных вызовов методов, которые в противном случае могли бы быть не виртуальными.
В последнем случае я говорю об оптимизации JIT.Рассмотрим этот код:
string x = "hello";
object o = x;
string y = o.ToString();
Я подозреваю, что JIT завершается по-настоящему виртуальным вызовом метода, поиском в vtable и т. Д. Нет шансов на встраивание.
Если бы мы вызвали x.ToString()
вместо этого, я ожидал бы, что JIT заметит, что String
является конечным классом, и поэтому реализация String.ToString
не может быть переопределена дальше - допускается вызов без просмотра vtable и, возможно, встраиваниетоже.
Это предположение, но об этом стоит подумать.Стоимость обработки объекта как более общего типа гораздо более вероятна, чем стоимость копирования ссылки.