Для этого кода:IL ограничен вызов
class Program
{
static void Main()
{
Console.WriteLine(new MyStruct().ToString());
}
struct MyStruct { }
}
С # компилятор генерирует constrained callvirt
IL код.
This статье говорится:
Например, если тип значения V переопределяет метод Object.ToString(), а V.ToString вызова() инструкция испускается; если это не так, выдается команда box и инструкция Object.ToString() callvirt. Проблема с версией может возникнуть < ...> если позднее будет добавлено переопределение.
Итак, мой вопрос: почему это будет проблемой в этом случае, если компилятор будет генерировать код box
, а не ограниченный вызов?
не ссылка вы предоставили уже объясняет, как раз перед вашей цитатой: «Использование ограниченно Приставка также позволяет избежать потенциальных проблем с версиями с типами значений Если ограничен префикс не используются, различный IL должен выделяться в зависимости. о том, переопределяет ли тип значения метод System.Object. " –
@ Selman22, поэтому прошу. Я не понимаю, почему это не может быть просто boxwirt для обоих случаев. – aush