Для этого кода:
class Program
{
static void Main()
{
Console.WriteLine(new MyStruct().ToString());
}
struct MyStruct { }
}
компилятор C# генерирует constrained callvirt
IL-кода.
В В этой статье говорится:
Например, если тип значения V переопределяет метод Object.ToString(), выдается инструкция call V.ToString(); если это не так, генерируется инструкция box и инструкция callvirt Object.ToString(). Проблема управления версиями может возникнуть ‹...>, если позднее будет добавлено переопределение.
Итак, мой вопрос: почему в этом случае может возникнуть проблема, если компилятор сгенерирует код box
, а не вызов с ограничениями?