как в IL работают call и callvirt?
От: help-me  
Дата: 05.07.13 16:13
Оценка: :)
Читаю я тут книгу рихтера (перевод, 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(), а значит ссылкок ни на объект, ни на его метод нет? Как тогда он может работать?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.