Читаю я тут книгу рихтера (перевод, 3-е издание), и ничего не понимаю, зачем нужны 2 инструкции call и callvirt вызова методов вместо одной. Чтобы не поулчилось так, что читаю параграф совершенно зря, решил тут спросить, може кто-нить может нормально это объяснить?
И еще, в том же параграфе написано, что
public sealed class Program
{
public int GetFive(){return 5;}
public static void Main(){Program p = null; int x = p.GetFive();}
}
такой код может нормально работать в CLR, если писать его не на сишарпе (типа, не задействована ссылка this, поэтому он может работать, но не в сишарпе, так как в сишарпе юзается для этого случая callvirt). Но, если, судя по книге рихтера, адрес вызова этого метода должен находиться в куче, а объект в куче не выделен, а значит не выделена память под метод GetFive(), а значит ссылкок ни на объект, ни на его метод нет? Как тогда он может работать?