Как CLR обрабатывает вызовы методов extern в C # - PullRequest
5 голосов
/ 15 марта 2009

Я хочу спросить, почему все вызовы внешних методов являются статическими? Как CLR обрабатывает эти вызовы?

Ответы [ 2 ]

4 голосов
/ 15 марта 2009

Внешние вызовы методов относятся к неуправляемому коду. Таким образом, не имеет смысла вызываться для экземпляра (управляемого) объекта - первый (скрытый) аргумент в методе экземпляра является ссылкой на экземпляр, он же this. Как правило, методы extern включают только простые типы (примитивы, строки и т. Д.), А не объекты (за исключением, возможно, массивов - и даже они часто разрешаются до IntPtr вначале).

2 голосов
/ 16 марта 2009

extern вызовы также, как правило, должны соответствовать API "в стиле C", и C ничего не знает об объектах, таким образом, вызовы static.

Мое утверждение не на 100% верно, поскольку существует ThisCall соглашение о вызовах, которое можно использовать с [DllImport] в качестве помощи при вызове методов C ++.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...